Commit 36208e60 by Martin Liska Committed by Martin Liska

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
parent cd30a0b8
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> 2017-10-18 Segher Boessenkool <segher@kernel.crashing.org>
PR rtl-optimization/82602 PR rtl-optimization/82602
...@@ -1656,6 +1656,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p) ...@@ -1656,6 +1656,7 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
&& TREE_ADDRESSABLE (decl) && TREE_ADDRESSABLE (decl)
&& !TREE_STATIC (decl) && !TREE_STATIC (decl)
&& !DECL_HAS_VALUE_EXPR_P (decl) && !DECL_HAS_VALUE_EXPR_P (decl)
&& DECL_ALIGN (decl) <= MAX_SUPPORTED_STACK_ALIGNMENT
&& dbg_cnt (asan_use_after_scope)) && dbg_cnt (asan_use_after_scope))
{ {
asan_poisoned_variables->add (decl); asan_poisoned_variables->add (decl);
...@@ -6505,7 +6506,9 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) ...@@ -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); clobber = build2 (MODIFY_EXPR, TREE_TYPE (temp), temp, clobber);
gimple_push_cleanup (temp, clobber, false, pre_p, true); 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); tree asan_cleanup = build_asan_poison_call_expr (temp);
if (asan_cleanup) if (asan_cleanup)
......
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> 2017-10-19 Jakub Jelinek <jakub@redhat.com>
PR fortran/82568 PR fortran/82568
......
/* 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment