From 5760532a2dcbad3569928f56a1d5d60d7282087c Mon Sep 17 00:00:00 2001 From: Pádraig Brady Date: Wed, 3 Dec 2014 21:06:11 +0000 Subject: maint: avoid -fsanitize=undefined warning in rand-isaac * gl/lib/rand-isaac.c (isaac_refill): readisaac() purposefully passes unaligned pointers to avoid memory copies. This is only done on platforms where this is defined, so avoid the associated runtime warning generated with -fsanitize=undefined, which is: lib/rand-isaac.c:125:182: runtime error: store to misaligned address 0x63100003d7fd for type 'isaac_word', which requires 8 byte alignment 0x63100003d7fd: note: pointer points here 47 ce ed a4 be be be 00 00 00 00 00 00 00 00 ... ^ --- gl/lib/rand-isaac.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'gl') diff --git a/gl/lib/rand-isaac.c b/gl/lib/rand-isaac.c index c03242f66..3462b6d4b 100644 --- a/gl/lib/rand-isaac.c +++ b/gl/lib/rand-isaac.c @@ -35,6 +35,18 @@ #include "rand-isaac.h" #include +#include + +/* If the platform supports unaligned access, + then don't have -fsanitize=undefined warn about it. */ +#undef ATTRIBUTE_NO_WARN_SANITIZE_UNDEFINED +#if !_STRING_ARCH_unaligned \ + || __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 9) +# define ATTRIBUTE_NO_WARN_SANITIZE_UNDEFINED /* empty */ +#else +# define ATTRIBUTE_NO_WARN_SANITIZE_UNDEFINED \ + __attribute__ ((__no_sanitize_undefined__)) +#endif /* The minimum of two sizes A and B. */ static inline size_t @@ -81,7 +93,7 @@ ind (isaac_word const *m, isaac_word x) } /* Use and update *S to generate random data to fill RESULT. */ -void +void ATTRIBUTE_NO_WARN_SANITIZE_UNDEFINED isaac_refill (struct isaac_state *s, isaac_word result[ISAAC_WORDS]) { /* Caches of S->a and S->b. */ -- cgit v1.2.3-70-g09d2