From 598359f627dec765eb74e31d9e96901a68bbfb97 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Mon, 12 Apr 2021 10:49:41 +0200 Subject: ASAN: do not unpoison in OpenMP context gcc/ChangeLog: PR sanitizer/99877 * gimplify.c (gimplify_expr): Right now, we unpoison all variables before a goto . We should not do it if we are in a omp context. gcc/testsuite/ChangeLog: PR sanitizer/99877 * g++.dg/asan/pr99877.C: New test. --- gcc/gimplify.c | 3 ++- gcc/testsuite/g++.dg/asan/pr99877.C | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/asan/pr99877.C (limited to 'gcc') diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 1f417a5..b65106b 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -14328,7 +14328,8 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, Doing so would prevent us from reporting a false positives. */ if (asan_poisoned_variables && asan_used_labels != NULL - && asan_used_labels->contains (label)) + && asan_used_labels->contains (label) + && !gimplify_omp_ctxp) asan_poison_variables (asan_poisoned_variables, false, pre_p); break; diff --git a/gcc/testsuite/g++.dg/asan/pr99877.C b/gcc/testsuite/g++.dg/asan/pr99877.C new file mode 100644 index 0000000..95a8641 --- /dev/null +++ b/gcc/testsuite/g++.dg/asan/pr99877.C @@ -0,0 +1,19 @@ +/* PR sanitizer/99877*/ +/* { dg-options "-fsanitize=address -fopenmp -O2" } */ + +struct vector +{ + int size (); +}; +int +main () +{ + vector outqueue; +#pragma omp parallel + { + goto continueloop; + continueloop:; + } + for (; outqueue.size ();) + ; +} -- cgit v1.1