diff options
author | Larry Knox <lrknox@hdfgroup.org> | 2022-01-26 22:58:49 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-26 22:58:49 (GMT) |
commit | 5fb634ca26ce165bb09c5c920f345e546251876c (patch) | |
tree | ab63bf3cbf1158efaf389f1b07e48c2c44b0cb24 | |
parent | 5222abdd19c6636aad659ab47c29a77c631ee4ba (diff) | |
download | hdf5-5fb634ca26ce165bb09c5c920f345e546251876c.zip hdf5-5fb634ca26ce165bb09c5c920f345e546251876c.tar.gz hdf5-5fb634ca26ce165bb09c5c920f345e546251876c.tar.bz2 |
Revert 61464d7e (#1396)
Commit 61464d7e was a fix for a compiler error on OpenBSD where
int_fast8_t is in fact larger than 1 byte. However, the changes broke
H5detect.c generation of H5Tinit.c on Power8 big-endian, and probably on
all big-endian machines. Switching DETECT_BYTE to DETECT_I for 8 byte types doesn't work on our big-endian Power8 machine because switching the last parameter of DETECT_I_BYTE_CORE from "int" to the 8 byte type incorrectly sets dt->shared->u.atomic.order = H5T_ORDER_LE on a big-endian machine. A different fix to accomodate both big-endian and OpenBSD is needed. See commit 61464d7e for OpenBSD info.
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
-rw-r--r-- | src/H5detect.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/H5detect.c b/src/H5detect.c index 2b3df90..e72d7a0 100644 --- a/src/H5detect.c +++ b/src/H5detect.c @@ -205,12 +205,15 @@ precision(detected_t *d) } /*------------------------------------------------------------------------- - * Function: DETECT_I + * Function: DETECT_I/DETECT_BYTE * - * Purpose: This macro takes a type like `int' and a base name like + * Purpose: These macro takes a type like `int' and a base name like * `nati' and detects the byte order. The VAR is used to * construct the names of the C variables defined. * + * DETECT_I is used for types that are larger than one byte, + * DETECT_BYTE is used for types that are exactly one byte. + * * Return: void * *------------------------------------------------------------------------- @@ -244,8 +247,17 @@ precision(detected_t *d) } \ } +#define DETECT_BYTE(TYPE, VAR, INFO) \ + { \ + HDcompile_assert(sizeof(TYPE) == 1); \ + \ + DETECT_I_BYTE_CORE(TYPE, VAR, INFO, int) \ + } + #define DETECT_I(TYPE, VAR, INFO) \ { \ + HDcompile_assert(sizeof(TYPE) > 1); \ + \ DETECT_I_BYTE_CORE(TYPE, VAR, INFO, TYPE) \ } @@ -1220,9 +1232,9 @@ bit.\n"; static void HDF_NO_UBSAN detect_C89_integers(void) { - DETECT_I(signed char, SCHAR, d_g[nd_g]); + DETECT_BYTE(signed char, SCHAR, d_g[nd_g]); nd_g++; - DETECT_I(unsigned char, UCHAR, d_g[nd_g]); + DETECT_BYTE(unsigned char, UCHAR, d_g[nd_g]); nd_g++; DETECT_I(short, SHORT, d_g[nd_g]); nd_g++; @@ -1266,17 +1278,17 @@ detect_C89_floats(void) static void HDF_NO_UBSAN detect_C99_integers8(void) { - DETECT_I(int8_t, INT8, d_g[nd_g]); + DETECT_BYTE(int8_t, INT8, d_g[nd_g]); nd_g++; - DETECT_I(uint8_t, UINT8, d_g[nd_g]); + DETECT_BYTE(uint8_t, UINT8, d_g[nd_g]); nd_g++; - DETECT_I(int_least8_t, INT_LEAST8, d_g[nd_g]); + DETECT_BYTE(int_least8_t, INT_LEAST8, d_g[nd_g]); nd_g++; - DETECT_I(uint_least8_t, UINT_LEAST8, d_g[nd_g]); + DETECT_BYTE(uint_least8_t, UINT_LEAST8, d_g[nd_g]); nd_g++; - DETECT_I(int_fast8_t, INT_FAST8, d_g[nd_g]); + DETECT_BYTE(int_fast8_t, INT_FAST8, d_g[nd_g]); nd_g++; - DETECT_I(uint_fast8_t, UINT_FAST8, d_g[nd_g]); + DETECT_BYTE(uint_fast8_t, UINT_FAST8, d_g[nd_g]); nd_g++; } |