Skip to content
Snippets Groups Projects
Commit 2c42f566 authored by Matthieu Schaller's avatar Matthieu Schaller Committed by Peter W. Draper
Browse files

Use a locally-defined macro to bypass a GCC optimization bug

parent 305a9b90
No related branches found
No related tags found
1 merge request!1810Use a locally-defined macro to bypass a GCC optimization bug
...@@ -642,34 +642,33 @@ void append_dataset(const struct unit_system *snapshot_units, ...@@ -642,34 +642,33 @@ void append_dataset(const struct unit_system *snapshot_units,
hid_t mem_type_id, hsize_t chunk_size, hid_t mem_type_id, hsize_t chunk_size,
int lossy_compression, int lossy_compression,
enum lossy_compression_schemes compression_scheme, enum lossy_compression_schemes compression_scheme,
int gzip_level, const int rank, const hsize_t *dims, int gzip_level, const int rank, const hsize_t dims[2],
const hsize_t num_written, const void *data) { const hsize_t num_written, const void *data) {
const int max_rank = 2; if (rank > 2)
if (rank > max_rank) error("HDF5 dataset has too may dimensions.");
error("HDF5 dataset has too may dimensions. Increase max_rank.");
if (rank < 1) error("HDF5 dataset must be at least one dimensional"); if (rank < 1) error("HDF5 dataset must be at least one dimensional");
/* If we have zero elements to append, there's nothing to do */ /* If we have zero elements to append, there's nothing to do */
if (dims[0] == 0) return; if (dims[0] == 0) return;
/* Determine size of the dataset after we append our data */ /* Determine size of the dataset after we append our data */
hsize_t full_dims[max_rank]; hsize_t full_dims[rank];
for (int i = 0; i < rank; i += 1) full_dims[i] = dims[i]; for (int i = 0; i < rank; i += 1) full_dims[i] = dims[i];
full_dims[0] += num_written; full_dims[0] += num_written;
/* Determine maximum size in each dimension */ /* Determine maximum size in each dimension */
hsize_t max_dims[max_rank]; hsize_t max_dims[rank];
for (int i = 1; i < rank; i += 1) max_dims[i] = full_dims[i]; for (int i = 1; i < rank; i += 1) max_dims[i] = full_dims[i];
max_dims[0] = H5S_UNLIMITED; max_dims[0] = H5S_UNLIMITED;
/* Determine chunk size in each dimension */ /* Determine chunk size in each dimension */
hsize_t chunk_dims[max_rank]; hsize_t chunk_dims[rank];
for (int i = 1; i < rank; i += 1) chunk_dims[i] = full_dims[i]; for (int i = 1; i < rank; i += 1) chunk_dims[i] = full_dims[i];
chunk_dims[0] = (hsize_t)chunk_size; chunk_dims[0] = (hsize_t)chunk_size;
/* Find offset to region to write in each dimension */ /* Find offset to region to write in each dimension */
hsize_t offset[max_rank]; hsize_t offset[rank];
for (int i = 1; i < rank; i += 1) offset[i] = 0; for (int i = 1; i < rank; i += 1) offset[i] = 0;
offset[0] = num_written; offset[0] = num_written;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment