Commit d838c2d5 by Jakub Jelinek Committed by Martin Liska

Fix wrong use-after-scope sanitization for omp variable (PR sanitizer/85081).

2018-03-28  Jakub Jelinek  <jakub@redhat.com>
	    Martin Liska  <mliska@suse.cz>

	PR sanitizer/85081
	* gimplify.c (asan_poison_variable): Don't do the check for
	gimplify_omp_ctxp here.
	(gimplify_decl_expr): Do it here.
	(gimplify_target_expr): Likewise.
2018-03-28  Jakub Jelinek  <jakub@redhat.com>
	    Martin Liska  <mliska@suse.cz>

	PR sanitizer/85081
	* g++.dg/asan/pr85081.C: New test.

Co-Authored-By: Martin Liska <mliska@suse.cz>

From-SVN: r258924
parent a48b4234
2018-03-28 Jakub Jelinek <jakub@redhat.com>
Martin Liska <mliska@suse.cz>
PR sanitizer/85081
* gimplify.c (asan_poison_variable): Don't do the check for
gimplify_omp_ctxp here.
(gimplify_decl_expr): Do it here.
(gimplify_target_expr): Likewise.
2018-03-28 Martin Liska <mliska@suse.cz> 2018-03-28 Martin Liska <mliska@suse.cz>
PR target/84988 PR target/84988
......
...@@ -1168,10 +1168,6 @@ static void ...@@ -1168,10 +1168,6 @@ static void
asan_poison_variable (tree decl, bool poison, gimple_stmt_iterator *it, asan_poison_variable (tree decl, bool poison, gimple_stmt_iterator *it,
bool before) bool before)
{ {
/* When within an OMP context, do not emit ASAN_MARK internal fns. */
if (gimplify_omp_ctxp)
return;
tree unit_size = DECL_SIZE_UNIT (decl); tree unit_size = DECL_SIZE_UNIT (decl);
tree base = build_fold_addr_expr (decl); tree base = build_fold_addr_expr (decl);
...@@ -1689,7 +1685,8 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p) ...@@ -1689,7 +1685,8 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p)
&& !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 && DECL_ALIGN (decl) <= MAX_SUPPORTED_STACK_ALIGNMENT
&& dbg_cnt (asan_use_after_scope)) && dbg_cnt (asan_use_after_scope)
&& !gimplify_omp_ctxp)
{ {
asan_poisoned_variables->add (decl); asan_poisoned_variables->add (decl);
asan_poison_variable (decl, false, seq_p); asan_poison_variable (decl, false, seq_p);
...@@ -6614,7 +6611,8 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) ...@@ -6614,7 +6611,8 @@ gimplify_target_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
} }
if (asan_poisoned_variables if (asan_poisoned_variables
&& DECL_ALIGN (temp) <= MAX_SUPPORTED_STACK_ALIGNMENT && DECL_ALIGN (temp) <= MAX_SUPPORTED_STACK_ALIGNMENT
&& dbg_cnt (asan_use_after_scope)) && dbg_cnt (asan_use_after_scope)
&& !gimplify_omp_ctxp)
{ {
tree asan_cleanup = build_asan_poison_call_expr (temp); tree asan_cleanup = build_asan_poison_call_expr (temp);
if (asan_cleanup) if (asan_cleanup)
......
2018-03-28 Jakub Jelinek <jakub@redhat.com>
Martin Liska <mliska@suse.cz>
PR sanitizer/85081
* g++.dg/asan/pr85081.C: New test.
2018-03-28 Alexandre Oliva <aoliva@redhat.com> 2018-03-28 Alexandre Oliva <aoliva@redhat.com>
PR c++/84789 PR c++/84789
......
/* PR sanitizer/85081 */
/* { dg-do run } */
/* { dg-options "-fopenmp-simd" } */
/* { dg-require-effective-target fopenmp } */
inline const int& max(const int& a, const int& b)
{
return a < b ? b : a;
}
int main()
{
#pragma omp simd
for ( int i = 0; i < 20; ++i )
{
const int j = max(i, 1);
}
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