]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR lto/69254 (ICE in streamer_get_builtin_tree when using -fsanitize=shift on...
authorJakub Jelinek <jakub@redhat.com>
Wed, 27 Jan 2016 18:48:30 +0000 (19:48 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 27 Jan 2016 18:48:30 +0000 (19:48 +0100)
PR lto/69254
* sanitizer.def: Add BEGIN_SANITIZER_BUILTINS and
END_SANITIZER_BUILTINS markers using DEF_BUILTIN_STUB.
* asan.c (DEF_BUILTIN_STUB): Temporarily define.
* tree-streamer-in.c: Include asan.h.
(streamer_get_builtin_tree): For builtins in sanitizer
range call initialize_sanitizer_builtins and retry.

From-SVN: r232891

gcc/ChangeLog
gcc/asan.c
gcc/sanitizer.def
gcc/tree-streamer-in.c

index 60322afb7a6d2a05b7bb5a22d2e2dd207a184061..197306031a78189e8c20cbcb295e59680f2a2412 100644 (file)
@@ -1,3 +1,13 @@
+2016-01-27  Jakub Jelinek  <jakub@redhat.com>
+
+       PR lto/69254
+       * sanitizer.def: Add BEGIN_SANITIZER_BUILTINS and
+       END_SANITIZER_BUILTINS markers using DEF_BUILTIN_STUB.
+       * asan.c (DEF_BUILTIN_STUB): Temporarily define.
+       * tree-streamer-in.c: Include asan.h.
+       (streamer_get_builtin_tree): For builtins in sanitizer
+       range call initialize_sanitizer_builtins and retry.
+
 2016-01-27  Ian Lance Taylor  <iant@google.com>
 
        * common.opt (fkeep-gc-roots-live): New undocumented option.
index 2f9f92fa676748718e17f6e8f29d0b06c7a9dafa..1c266492fbe4b5dcf43fc0bc7adfb4024e8f39ae 100644 (file)
@@ -2370,6 +2370,8 @@ initialize_sanitizer_builtins (void)
   /* ECF_COLD missing */ ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST
 #undef ATTR_PURE_NOTHROW_LEAF_LIST
 #define ATTR_PURE_NOTHROW_LEAF_LIST ECF_PURE | ATTR_NOTHROW_LEAF_LIST
+#undef DEF_BUILTIN_STUB
+#define DEF_BUILTIN_STUB(ENUM, NAME)
 #undef DEF_SANITIZER_BUILTIN
 #define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
   decl = add_builtin_function ("__builtin_" NAME, TYPE, ENUM,          \
@@ -2389,6 +2391,7 @@ initialize_sanitizer_builtins (void)
                           ATTR_PURE_NOTHROW_LEAF_LIST)
 
 #undef DEF_SANITIZER_BUILTIN
+#undef DEF_BUILTIN_STUB
 }
 
 /* Called via htab_traverse.  Count number of emitted
index 3a71801cad83eb99188f03dd1cb6b4a635458cd8..303c1e46df4aa6429574cddd057333f73d5fe55b 100644 (file)
@@ -20,12 +20,16 @@ along with GCC; see the file COPYING3.  If not see
 
 /* Before including this file, you should define a macro:
 
+     DEF_BUILTIN_STUB(ENUM, NAME)
      DEF_SANITIZER_BUILTIN (ENUM, NAME, TYPE, ATTRS)
 
    See builtins.def for details.
    The builtins are created by the C-family of FEs in c-family/c-common.c,
    for other FEs by asan.c.  */
 
+/* This has to come before all the sanitizer builtins.  */
+DEF_BUILTIN_STUB(BEGIN_SANITIZER_BUILTINS, (const char *)0)
+
 /* Address Sanitizer */
 DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_INIT, "__asan_init",
                      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
@@ -515,3 +519,6 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_UBSAN_HANDLE_DYNAMIC_TYPE_CACHE_MISS_ABORT,
 DEF_SANITIZER_BUILTIN(BUILT_IN_SANITIZER_COV_TRACE_PC,
                      "__sanitizer_cov_trace_pc",
                      BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
+
+/* This has to come after all the sanitizer builtins.  */
+DEF_BUILTIN_STUB(END_SANITIZER_BUILTINS, (const char *)0)
index 3c8558e67ae03a92bf881aa8aea71db211b3bb8b..91c72eb293e9b53eb0aa9ec4359c0aa5a86fabc4 100644 (file)
@@ -32,6 +32,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "builtins.h"
 #include "ipa-chkp.h"
 #include "gomp-constants.h"
+#include "asan.h"
 
 
 /* Read a STRING_CST from the string table in DATA_IN using input
@@ -1136,13 +1137,21 @@ streamer_get_builtin_tree (struct lto_input_block *ib, struct data_in *data_in)
        fatal_error (input_location,
                     "machine independent builtin code out of range");
       result = builtin_decl_explicit (fcode);
-      if (!result
-         && fcode > BEGIN_CHKP_BUILTINS
-         && fcode < END_CHKP_BUILTINS)
+      if (!result)
        {
-         fcode = (enum built_in_function) (fcode - BEGIN_CHKP_BUILTINS - 1);
-         result = builtin_decl_explicit (fcode);
-         result = chkp_maybe_clone_builtin_fndecl (result);
+         if (fcode > BEGIN_CHKP_BUILTINS && fcode < END_CHKP_BUILTINS)
+           {
+             fcode = (enum built_in_function)
+                     (fcode - BEGIN_CHKP_BUILTINS - 1);
+             result = builtin_decl_explicit (fcode);
+             result = chkp_maybe_clone_builtin_fndecl (result);
+           }
+         else if (fcode > BEGIN_SANITIZER_BUILTINS
+                  && fcode < END_SANITIZER_BUILTINS)
+           {
+             initialize_sanitizer_builtins ();
+             result = builtin_decl_explicit (fcode);
+           }
        }
       gcc_assert (result);
     }