Do not instrument use-after-scope for vars with large alignment (PR sanitizer/82517).

2017-10-19  Martin Liska  <mliska@suse.cz>

	PR sanitizer/82517
	* gimplify.c (gimplify_decl_expr): Do not instrument variables
	that have a large alignment.
	(gimplify_target_expr): Likewise.
2017-10-19  Martin Liska  <mliska@suse.cz>

	PR sanitizer/82517
	* gcc.dg/asan/pr82517.c: New test.

From-SVN: r253879
This commit is contained in:
Martin Liska 2017-10-19 09:50:48 +02:00 committed by Martin Liska
parent cd30a0b8fe
commit 36208e6037
4 changed files with 59 additions and 1 deletions

View file

@ -1,3 +1,10 @@
2017-10-19 Martin Liska <mliska@suse.cz>
PR sanitizer/82517
* gimplify.c (gimplify_decl_expr): Do not instrument variables
that have a large alignment.
(gimplify_target_expr): Likewise.
2017-10-18 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/82602

View file

@ -1656,6 +1656,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
&& TREE_ADDRESSABLE (decl)
&& !TREE_STATIC (decl)
&& !DECL_HAS_VALUE_EXPR_P (decl)
&& DECL_ALIGN (decl) <= MAX_SUPPORTED_STACK_ALIGNMENT
&& dbg_cnt (asan_use_after_scope))
{
asan_poisoned_variables->add (decl);
@ -6505,7 +6506,9 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
clobber = build2 (MODIFY_EXPR, TREE_TYPE (temp), temp, clobber);
gimple_push_cleanup (temp, clobber, false, pre_p, true);
}
if (asan_poisoned_variables && dbg_cnt (asan_use_after_scope))
if (asan_poisoned_variables
&& DECL_ALIGN (temp) <= MAX_SUPPORTED_STACK_ALIGNMENT
&& dbg_cnt (asan_use_after_scope))
{
tree asan_cleanup = build_asan_poison_call_expr (temp);
if (asan_cleanup)

View file

@ -1,3 +1,8 @@
2017-10-19 Martin Liska <mliska@suse.cz>
PR sanitizer/82517
* gcc.dg/asan/pr82517.c: New test.
2017-10-19 Jakub Jelinek <jakub@redhat.com>
PR fortran/82568

View file

@ -0,0 +1,43 @@
/* PR sanitizer/82517. */
static int *pp;
void
baz ()
{
return;
}
void
bar (int *p)
{
*p = 1;
}
void
foo (int a)
{
if (a == 2)
{
lab:
baz ();
return;
}
if (a > 1)
{
int x __attribute__ ((aligned (256)));
pp = &x;
bar (&x);
if (!x)
goto lab;
}
}
int
main (int argc, char **argv)
{
foo (4);
foo (3);
return 0;
}