re PR target/65261 (bootstrap-ubsan ppc64le: gcc/libcpp/lex.c:552:30: runtime error...
authorMarkus Trippelsdorf <markus@trippelsdorf.de>
Wed, 4 Mar 2015 17:28:56 +0000 (17:28 +0000)
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>
Wed, 4 Mar 2015 17:28:56 +0000 (17:28 +0000)
Fix PR65261

Running bootstrap-ubsan on ppc64le shows many instances of:

  libcpp/lex.c:552:30: runtime error: load of misaligned address
  0x01001f31d37a for type 'const uchar', which requires 16 byte alignment

But the unaligned vector loads are intended in this case, because they
are preferable to forced-alignment on POWER8. So just silence the ubsan
errors.

2015-03-02  Markus Trippelsdorf  <markus@trippelsdorf.de>

include/
PR target/65261
* ansidecl.h (ATTRIBUTE_NO_SANITIZE_UNDEFINED): New macro.

libcpp/
PR target/65261
* lex.c (search_line_fast): Silence ubsan errors.

From-SVN: r221190

include/ChangeLog
include/ansidecl.h
libcpp/ChangeLog
libcpp/lex.c

index 689873b26b3b4b9a6b1e5e3ae4aa7eabaecd1dab..bd072ae59b4d02b45e24e98e15943dfff2eed016 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-02  Markus Trippelsdorf  <markus@trippelsdorf.de>
+
+       PR target/65261
+       * ansidecl.h (ATTRIBUTE_NO_SANITIZE_UNDEFINED): New macro.
+
 2015-02-19  Pedro Alves  <palves@redhat.com>
 
        * floatformat.h [__cplusplus]: Wrap in extern "C".
index 0fb23bba792dbb30d852723b9ac9a5d337e3aedc..04d75c33f747220ddf9e4cfabb29f762bea3b749 100644 (file)
@@ -276,6 +276,15 @@ So instead we use the macro below and test it against specific values.  */
 # endif /* GNUC >= 4.3 */
 #endif /* ATTRIBUTE_HOT */
 
+/* Attribute 'no_sanitize_undefined' was valid as of gcc 4.9.  */
+#ifndef ATTRIBUTE_NO_SANITIZE_UNDEFINED
+# if (GCC_VERSION >= 4009)
+#  define ATTRIBUTE_NO_SANITIZE_UNDEFINED __attribute__ ((no_sanitize_undefined))
+# else
+#  define ATTRIBUTE_NO_SANITIZE_UNDEFINED
+# endif /* GNUC >= 4.9 */
+#endif /* ATTRIBUTE_NO_SANITIZE_UNDEFINED */
+
 /* We use __extension__ in some places to suppress -pedantic warnings
    about GCC extensions.  This feature didn't work properly before
    gcc 2.8.  */
index 325f706096336e396cbdeeb0c5c7a25e1363f9e1..2d84835b7b726f1c19bf2c4b11e87bbc4554bc00 100644 (file)
@@ -1,3 +1,8 @@
+2015-03-02  Markus Trippelsdorf  <markus@trippelsdorf.de>
+
+       PR target/65261
+       * lex.c (search_line_fast): Silence ubsan errors.
+
 2015-02-03    <dodji@redhat.com>
 
        PR preprocessor/64803
index 4638510166fa34add0c22c9fbbacd123a79ce279..0dc473711833ce545b04ebc443ae991ec591477a 100644 (file)
@@ -519,6 +519,7 @@ init_vectorized_lexer (void)
    and VSX unaligned loads (when VSX is available).  This is otherwise
    the same as the pre-GCC 5 version.  */
 
+ATTRIBUTE_NO_SANITIZE_UNDEFINED
 static const uchar *
 search_line_fast (const uchar *s, const uchar *end ATTRIBUTE_UNUSED)
 {