re PR lto/69254 (ICE in streamer_get_builtin_tree when using -fsanitize=shift on the compile side only)
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
This commit is contained in:
parent
ede6737667
commit
8f91e6e0ef
4 changed files with 35 additions and 6 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue