]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: avoid -fsanitize=undefined warning in rand-isaac
authorPádraig Brady <P@draigBrady.com>
Wed, 3 Dec 2014 21:06:11 +0000 (21:06 +0000)
committerPádraig Brady <P@draigBrady.com>
Wed, 3 Dec 2014 23:38:36 +0000 (23:38 +0000)
* 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

index c03242f66a802a9960cbf6bfa989897248782bba..3462b6d4bad142a4dfa4e3f0c8337a93ae469582 100644 (file)
 #include "rand-isaac.h"
 
 #include <limits.h>
+#include <string.h>
+
+/* 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.  */