Skip to content

Commit

Permalink
Fix violations of -Wvla
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilMiller committed Aug 8, 2023
1 parent 7645eb5 commit 1388e14
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 53 deletions.
8 changes: 4 additions & 4 deletions extern/test_bmi_cpp/src/test_bmi_cpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ void TestBmiCpp::read_init_config(std::string config_file)
if (fp == NULL)
throw std::runtime_error("Invalid config file \""+config_file+"\"" SOURCE_LOC);

char config_line[max_config_line_length + 1];
std::vector<char> config_line(max_config_line_length + 1);

// TODO: may need to add other variables to track that everything that was required was properly set

Expand All @@ -365,9 +365,9 @@ void TestBmiCpp::read_init_config(std::string config_file)

for (size_t i = 0; i < config_line_count; i++) {
char *param_key, *param_value;
fgets(config_line, max_config_line_length + 1, fp);
fgets(config_line.data(), max_config_line_length + 1, fp);

char* config_line_ptr = config_line;
char* config_line_ptr = config_line.data();
config_line_ptr = strsep(&config_line_ptr, "\n");
param_key = strsep(&config_line_ptr, "=");
param_value = strsep(&config_line_ptr, "=");
Expand Down Expand Up @@ -477,4 +477,4 @@ void TestBmiCpp::run(long dt)
this->output_var_3.get()[2] += 3;
}
this->current_model_time += (double)dt;
}
}
6 changes: 3 additions & 3 deletions include/realizations/catchment/Bmi_Fortran_Adapter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ namespace models {

// Must get the names from the model as an array of C strings
// The array can be on the stack ...
char* names_array[variableCount];
std::vector<char*> names_array(variableCount);
// ... but allocate the space for the individual C strings (i.e., the char * elements)
for (int i = 0; i < variableCount; i++) {
names_array[i] = static_cast<char *>(malloc(sizeof(char) * BMI_MAX_VAR_NAME));
Expand All @@ -684,10 +684,10 @@ namespace models {
// With the necessary char** in hand, get the names from the model
int names_result;
if (is_input_variables) {
names_result = get_input_var_names(bmi_model.get(), names_array);
names_result = get_input_var_names(bmi_model.get(), names_array.data());
}
else {
names_result = get_output_var_names(bmi_model.get(), names_array);
names_result = get_output_var_names(bmi_model.get(), names_array.data());
}
if (names_result != BMI_SUCCESS) {
throw std::runtime_error(model_name + " failed to get array of " + varType + " variables names.");
Expand Down
8 changes: 4 additions & 4 deletions include/realizations/catchment/Bmi_Py_Adapter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -389,8 +389,8 @@ namespace models {
*/
int get_sum_of_grid_nodes_per_face(const int grid) {
int grid_node_face_count = GetGridFaceCount(grid);
int grid_nodes_per_face[grid_node_face_count];
GetGridNodesPerFace(grid, grid_nodes_per_face);
std::vector<int> grid_nodes_per_face(grid_node_face_count);
GetGridNodesPerFace(grid, grid_nodes_per_face.data());
int nodes_per_face_sum = 0;
for (int i = 0; i < grid_node_face_count; ++i)
nodes_per_face_sum += grid_nodes_per_face[i];
Expand Down Expand Up @@ -702,8 +702,8 @@ namespace models {
std::string grid_type = GetGridType(grid);
if( grid_type == "uniform_rectilinear" || grid_type == "rectilinear"){
int rank = GetGridRank(grid);
int shape[rank];
GetGridShape(grid, shape);
std::vector<int> shape(rank);
GetGridShape(grid, shape.data());
get_and_copy_grid_array<double>(name, grid, dest, shape[rank-index-1], "float");
return;
}else{
Expand Down
7 changes: 3 additions & 4 deletions src/realizations/catchment/Bmi_C_Adapter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,8 +308,7 @@ std::shared_ptr<std::vector<std::string>> Bmi_C_Adapter::inner_get_variable_name
std::vector<std::string>(variableCount));

// Must get the names from the model as an array of C strings
// The array can be on the stack ...
char* names_array[variableCount];
std::vector<char*> names_array(variableCount);
// ... but allocate the space for the individual C strings (i.e., the char * elements)
for (int i = 0; i < variableCount; i++) {
names_array[i] = static_cast<char *>(malloc(sizeof(char) * BMI_MAX_VAR_NAME));
Expand All @@ -318,10 +317,10 @@ std::shared_ptr<std::vector<std::string>> Bmi_C_Adapter::inner_get_variable_name
// With the necessary char** in hand, get the names from the model
int names_result;
if (is_input_variables) {
names_result = bmi_model->get_input_var_names(bmi_model.get(), names_array);
names_result = bmi_model->get_input_var_names(bmi_model.get(), names_array.data());
}
else {
names_result = bmi_model->get_output_var_names(bmi_model.get(), names_array);
names_result = bmi_model->get_output_var_names(bmi_model.get(), names_array.data());
}
if (names_result != BMI_SUCCESS) {
throw std::runtime_error(model_name + " failed to get array of output variables names.");
Expand Down
40 changes: 20 additions & 20 deletions test/realizations/catchments/Bmi_Fortran_Adapter_Test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -449,8 +449,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridSize_0_b) {
std::vector<int> shape = {3,3};
adapter->SetValue("grid_1_shape", shape.data());
//Must be int to align with fortran c_int
int grid_shape[rank+1];
adapter->GetGridShape(grd, grid_shape);
std::vector<int> grid_shape(rank+1);
adapter->GetGridShape(grd, grid_shape.data());

// FIXME embed the expected value directly in the test and remove from "expected_input_grid_size"...
// since the shape is dictated in this test...
Expand Down Expand Up @@ -506,8 +506,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridShape_0_a) {
int rank = adapter->GetGridRank(grd);
ASSERT_EQ(rank, 0);
//Must be int to align with fortran c_int
int shape[rank+1];
adapter->GetGridShape(grd, shape);
std::vector<int> shape(rank+1);
adapter->GetGridShape(grd, shape.data());
//shape not defined for scalars, so should be 0
ASSERT_EQ(shape[0], 0);
}
Expand All @@ -523,8 +523,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridShape_0_b) {
std::vector<int> shape = {3,4};
adapter->SetValue("grid_1_shape", shape.data());
//Must be int to align with fortran c_int
int grid_shape[rank];
adapter->GetGridShape(grd, grid_shape);
std::vector<int> grid_shape(rank);
adapter->GetGridShape(grd, grid_shape.data());
ASSERT_EQ(shape[0], grid_shape[0]);
ASSERT_EQ(shape[1], grid_shape[1]);
}
Expand All @@ -537,8 +537,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridSpacing_0_a) {
int grd = adapter->GetVarGrid(variable_name);
int rank = adapter->GetGridRank(grd);
ASSERT_EQ(rank, 0);
double spacing[rank+1];
adapter->GetGridSpacing(grd, spacing);
std::vector<double> spacing(rank+1);
adapter->GetGridSpacing(grd, spacing.data());
//spacing undefined for scalar, so should be 0
ASSERT_EQ(spacing[0], 0);
}
Expand All @@ -551,8 +551,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridSpacing_0_b) {
int grd = adapter->GetVarGrid(variable_name);
int rank = adapter->GetGridRank(grd);
ASSERT_EQ(rank, 2);
double grid_spacing[rank];
adapter->GetGridSpacing(grd, grid_spacing);
std::vector<double> grid_spacing(rank);
adapter->GetGridSpacing(grd, grid_spacing.data());
//spacing not yet established for grid, so should be 0, 0
ASSERT_EQ(grid_spacing[0], 0.0);
ASSERT_EQ(grid_spacing[1], 0.0);
Expand All @@ -569,8 +569,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridSpacing_0_c) {
//NOTE spacing in BMI is again ij order, so this is `dy, dx`
std::vector<double> spacing = {2.0, 2.0}; //TODO if this isn't double, the results are wacky...but it doesn't crash...
adapter->SetValue("grid_1_spacing", spacing.data());
double grid_spacing[rank];
adapter->GetGridSpacing(grd, grid_spacing);
std::vector<double> grid_spacing(rank);
adapter->GetGridSpacing(grd, grid_spacing.data());
ASSERT_EQ(grid_spacing[0], spacing[0]);
ASSERT_EQ(grid_spacing[1], spacing[1]);
}
Expand All @@ -586,8 +586,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridSpacing_0_d) {
//NOTE spacing in BMI is again ij order, so this is `dy, dx`
std::vector<int> units= {1, 1}; //The enum value for `m` or `meters` in bmi_grid.f90 must be int type
adapter->SetValue("grid_1_units", units.data());
int grid_units[rank];
adapter->GetValue("grid_1_units", grid_units);
std::vector<int> grid_units(rank);
adapter->GetValue("grid_1_units", grid_units.data());
ASSERT_EQ(grid_units[0], units[0]);
ASSERT_EQ(grid_units[1], units[1]);
}
Expand All @@ -600,8 +600,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridOrigin_0_a) {
int grd = adapter->GetVarGrid(variable_name);
int rank = adapter->GetGridRank(grd);
ASSERT_EQ(rank, 0);
double origin[rank+1];
adapter->GetGridOrigin(grd, origin);
std::vector<double> origin(rank+1);
adapter->GetGridOrigin(grd, origin.data());
//origin undefined for scalar, so should be 0
ASSERT_EQ(origin[0], 0);
}
Expand All @@ -614,8 +614,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridOrigin_0_b) {
int grd = adapter->GetVarGrid(variable_name);
int rank = adapter->GetGridRank(grd);
ASSERT_EQ(rank, 2);
double origin[rank];
adapter->GetGridOrigin(grd, origin);
std::vector<double> origin(rank);
adapter->GetGridOrigin(grd, origin.data());
//origin not yet established for grid, should be 0,0
ASSERT_EQ(origin[0], 0);
ASSERT_EQ(origin[1], 0);
Expand All @@ -632,8 +632,8 @@ TEST_F(Bmi_Fortran_Adapter_Test, GetGridOrigin_0_c) {
//NOTE origin is also ij order, so this is `y0,x0`
std::vector<double> _origin = {42.0, 42.0}; //TODO if this isn't double, the results are wacky...but it doesn't crash...
adapter->SetValue("grid_1_origin", _origin.data());
double origin[rank];
adapter->GetGridOrigin(grd, origin);
std::vector<double> origin(rank);
adapter->GetGridOrigin(grd, origin.data());
for(int i = 0; i < rank; i++){
ASSERT_EQ(origin[i], _origin[i]);
}
Expand Down
36 changes: 18 additions & 18 deletions test/realizations/catchments/Bmi_Py_Adapter_Test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -924,9 +924,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridShape_0_a) {
int rank = examples[ex_index].adapter->GetGridRank(grid_id);

ASSERT_EQ(rank, 0);
int grid_shape[rank+1];
std::vector<int> grid_shape(rank+1);

examples[ex_index].adapter->GetGridShape(grid_id, grid_shape);
examples[ex_index].adapter->GetGridShape(grid_id, grid_shape.data());
ASSERT_EQ(grid_shape[0], 0);
}

Expand All @@ -948,9 +948,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridShape_0_b) {
int rank = examples[ex_index].adapter->GetGridRank(grid_id);

ASSERT_EQ(rank, 2);
int grid_shape[rank];
std::vector<int> grid_shape(rank);

examples[ex_index].adapter->GetGridShape(grid_id, grid_shape);
examples[ex_index].adapter->GetGridShape(grid_id, grid_shape.data());
ASSERT_EQ(grid_shape[0], shape[0]);
ASSERT_EQ(grid_shape[1], shape[1]);
}
Expand All @@ -968,9 +968,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridSpacing_0_a) {
int rank = examples[ex_index].adapter->GetGridRank(grid_id);

ASSERT_EQ(rank, 0);
double grid_spacing[rank+1];
std::vector<double> grid_spacing(rank+1);

examples[ex_index].adapter->GetGridSpacing(grid_id, grid_spacing);
examples[ex_index].adapter->GetGridSpacing(grid_id, grid_spacing.data());
ASSERT_EQ(grid_spacing[0], 0);
}

Expand All @@ -987,9 +987,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridSpacing_0_b) {
int rank = examples[ex_index].adapter->GetGridRank(grid_id);

ASSERT_EQ(rank, 2);
double grid_spacing[rank];
std::vector<double> grid_spacing(rank);

examples[ex_index].adapter->GetGridSpacing(grid_id, grid_spacing);
examples[ex_index].adapter->GetGridSpacing(grid_id, grid_spacing.data());
for(int i = 0; i < rank; i++){
ASSERT_EQ(grid_spacing[i], 0);
}
Expand All @@ -1011,9 +1011,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridSpacing_0_c) {
examples[ex_index].adapter->SetValue("grid_1_spacing", spacing.data());

ASSERT_EQ(rank, 2);
double grid_spacing[rank];
std::vector<double> grid_spacing(rank);

examples[ex_index].adapter->GetGridSpacing(grid_id, grid_spacing);
examples[ex_index].adapter->GetGridSpacing(grid_id, grid_spacing.data());
for(int i = 0; i < rank; i++){
ASSERT_EQ(grid_spacing[i], 2.0);
}
Expand All @@ -1034,8 +1034,8 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridSpacing_0_d) {
std::vector<short> units = {1,1}; //The enum value for `m` or `meters` in bmi_grid.py
examples[ex_index].adapter->SetValue("grid_1_units", units.data());

short grid_units[rank];
examples[ex_index].adapter->GetValue("grid_1_units", grid_units);
std::vector<short> grid_units(rank);
examples[ex_index].adapter->GetValue("grid_1_units", grid_units.data());
for(int i = 0; i < rank; i++){
ASSERT_EQ(grid_units[i], units[i]);
}
Expand All @@ -1053,9 +1053,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridOrigin_0_a) {
int rank = examples[ex_index].adapter->GetGridRank(grid_id);

ASSERT_EQ(rank, 2);
double grid_origin[rank];
std::vector<double> grid_origin(rank);

examples[ex_index].adapter->GetGridSpacing(grid_id, grid_origin);
examples[ex_index].adapter->GetGridSpacing(grid_id, grid_origin.data());
ASSERT_EQ(grid_origin[0], 0);
ASSERT_EQ(grid_origin[1], 0);
}
Expand All @@ -1073,9 +1073,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridOrigin_0_b) {
int rank = examples[ex_index].adapter->GetGridRank(grid_id);

ASSERT_EQ(rank, 2);
double grid_origin[rank];
std::vector<double> grid_origin(rank);

examples[ex_index].adapter->GetGridOrigin(grid_id, grid_origin);
examples[ex_index].adapter->GetGridOrigin(grid_id, grid_origin.data());
for(int i = 0; i < rank; i++){
ASSERT_EQ(grid_origin[i], 0);
}
Expand All @@ -1097,9 +1097,9 @@ TEST_F(Bmi_Py_Adapter_Test, GetGridOrigin_0_c) {
examples[ex_index].adapter->SetValue("grid_1_origin", origin.data());

ASSERT_EQ(rank, 2);
double grid_origin[rank];
std::vector<double> grid_origin(rank);

examples[ex_index].adapter->GetGridOrigin(grid_id, grid_origin);
examples[ex_index].adapter->GetGridOrigin(grid_id, grid_origin.data());
for(int i = 0; i < rank; i++){
ASSERT_EQ(grid_origin[i], 42.0);
}
Expand Down

0 comments on commit 1388e14

Please sign in to comment.