diff options
author | David Young <dyoung@hdfgroup.org> | 2022-04-16 15:21:18 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-16 15:21:18 (GMT) |
commit | a80897ee4944ff6008bfb3b93619ebcb58a070d1 (patch) | |
tree | f01b999aa5168e6869e4cf35c073377e3db09cd7 /config/cmake/ConversionTests.c | |
parent | 463ef39bc777340b731903995a2ad416ec5e0ae4 (diff) | |
download | hdf5-a80897ee4944ff6008bfb3b93619ebcb58a070d1.zip hdf5-a80897ee4944ff6008bfb3b93619ebcb58a070d1.tar.gz hdf5-a80897ee4944ff6008bfb3b93619ebcb58a070d1.tar.bz2 |
Remove H5_NO_ALIGNMENT_RESTRICTIONS (#1426)
* Do not conditionally compile code that uses a pointer dereference
and assignment to copy a potentially unaligned variable to aligned
automatic storage, or vice versa. Instead, always use naked `memcpy(3)`s.
Disassembling the generated code reveals that the `memcpy(3)`s optimize
(`-O3`) to a single `mov` instruction for x86_64, which is not strict
about alignment.
This change reduces the size of code and scripts by 143 lines, eases
our way to cross-compilation, and avoids invoking undefined behavior.
* Committing clang-format changes
* Per discussion, use HD and add comments.
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'config/cmake/ConversionTests.c')
-rw-r--r-- | config/cmake/ConversionTests.c | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/config/cmake/ConversionTests.c b/config/cmake/ConversionTests.c index f80959f..f100dd8 100644 --- a/config/cmake/ConversionTests.c +++ b/config/cmake/ConversionTests.c @@ -234,59 +234,6 @@ done: } #endif -#ifdef H5_NO_ALIGNMENT_RESTRICTIONS_TEST - -#include <stdlib.h> -#include <string.h> - -typedef struct { - size_t len; - void *p; -} hvl_t; - -#ifdef FC_DUMMY_MAIN -#ifndef FC_DUMMY_MAIN_EQ_F77 -# ifdef __cplusplus -extern "C" -# endif -int FC_DUMMY_MAIN() -{ return 1;} -#endif -#endif -int HDF_NO_UBSAN -main () -{ - - char *chp = "beefs"; - char **chpp = malloc (2 * sizeof (char *)); - char **chpp2; - hvl_t vl = { 12345, (void *) chp }; - hvl_t *vlp; - hvl_t *vlp2; - - memcpy ((void *) ((char *) chpp + 1), &chp, sizeof (char *)); - chpp2 = (char **) ((char *) chpp + 1); - if (strcmp (*chpp2, chp)) { - free (chpp); - return 1; - } - free (chpp); - - vlp = malloc (2 * sizeof (hvl_t)); - memcpy ((void *) ((char *) vlp + 1), &vl, sizeof (hvl_t)); - vlp2 = (hvl_t *) ((char *) vlp + 1); - if (vlp2->len != vl.len || vlp2->p != vl.p) { - free (vlp); - return 1; - } - free (vlp); - - ; - return 0; -} - -#endif - #ifdef H5_DISABLE_SOME_LDOUBLE_CONV_TEST #include <stdio.h> |