This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Fix PR65261


On 2015.03.02 at 18:53 +0100, Marek Polacek wrote:
> On Mon, Mar 02, 2015 at 06:22:49PM +0100, Markus Trippelsdorf wrote:
> > --- a/libcpp/lex.c
> > +++ b/libcpp/lex.c
> > @@ -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)
> >  {
> 
> I don't think you can use the __attribute__ just like that.  If adding
> such an attribute is the correct thing to do, then we should probably
> define a macro in include/ansidecl.h, with a proper GCC_VERSION guard.

Ok. Here is an updated version:

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.

diff --git a/include/ansidecl.h b/include/ansidecl.h
index 0fb23bba792d..04d75c33f747 100644
--- a/include/ansidecl.h
+++ b/include/ansidecl.h
@@ -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.  */
diff --git a/libcpp/lex.c b/libcpp/lex.c
index 4638510166fa..0dc473711833 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -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)
 {

-- 
Markus


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]