sanitizer.def (BUILT_IN_ASAN_HANDLE_NO_RETURN): New builtin.

* sanitizer.def (BUILT_IN_ASAN_HANDLE_NO_RETURN): New builtin.
	* asan.c (instrument_builtin_call): Change is_gimple_builtin_call
	gcc_assert to gcc_checking_assert.
	(maybe_instrument_call): Imit __builtin___asan_handle_no_return ()
	before noreturn calls other than __builtin_trap () and
	__builtin_unreachable ().

	* c-c++-common/asan/clone-test-1.c: Remove bogus dg-shouldfail.

From-SVN: r194390
This commit is contained in:
Jakub Jelinek 2012-12-11 11:26:56 +01:00 committed by Jakub Jelinek
parent 477a24c1c7
commit 2b2571c99c
3 changed files with 36 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2012-12-11 Jakub Jelinek <jakub@redhat.com>
* sanitizer.def (BUILT_IN_ASAN_HANDLE_NO_RETURN): New builtin.
* asan.c (instrument_builtin_call): Change is_gimple_builtin_call
gcc_assert to gcc_checking_assert.
(maybe_instrument_call): Imit __builtin___asan_handle_no_return ()
before noreturn calls other than __builtin_trap () and
__builtin_unreachable ().
2012-12-11 Richard Biener <rguenther@suse.de>
PR other/54324

View File

@ -1072,7 +1072,7 @@ instrument_builtin_call (gimple_stmt_iterator *iter)
{
gimple call = gsi_stmt (*iter);
gcc_assert (is_gimple_builtin_call (call));
gcc_checking_assert (is_gimple_builtin_call (call));
tree callee = gimple_call_fndecl (call);
location_t loc = gimple_location (call);
@ -1392,8 +1392,29 @@ instrument_assignment (gimple_stmt_iterator *iter)
static bool
maybe_instrument_call (gimple_stmt_iterator *iter)
{
if (is_gimple_builtin_call (gsi_stmt (*iter)))
return instrument_builtin_call (iter);
gimple stmt = gsi_stmt (*iter);
bool is_builtin = is_gimple_builtin_call (stmt);
if (is_builtin
&& instrument_builtin_call (iter))
return true;
if (gimple_call_noreturn_p (stmt))
{
if (is_builtin)
{
tree callee = gimple_call_fndecl (stmt);
switch (DECL_FUNCTION_CODE (callee))
{
case BUILT_IN_UNREACHABLE:
case BUILT_IN_TRAP:
/* Don't instrument these. */
return false;
}
}
tree decl = builtin_decl_implicit (BUILT_IN_ASAN_HANDLE_NO_RETURN);
gimple g = gimple_build_call (decl, 0);
gimple_set_location (g, gimple_location (stmt));
gsi_insert_before (iter, g, GSI_SAME_STMT);
}
return false;
}

View File

@ -55,6 +55,9 @@ DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_REGISTER_GLOBALS,
DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_UNREGISTER_GLOBALS,
"__asan_unregister_globals",
BT_FN_VOID_PTR_PTRMODE, ATTR_NOTHROW_LEAF_LIST)
DEF_SANITIZER_BUILTIN(BUILT_IN_ASAN_HANDLE_NO_RETURN,
"__asan_handle_no_return",
BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
/* Thread Sanitizer */
DEF_SANITIZER_BUILTIN(BUILT_IN_TSAN_INIT, "__tsan_init",