]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ASAN: do not unpoison in OpenMP context
authorMartin Liska <mliska@suse.cz>
Mon, 12 Apr 2021 08:49:41 +0000 (10:49 +0200)
committerMartin Liska <mliska@suse.cz>
Mon, 12 Apr 2021 11:34:02 +0000 (13:34 +0200)
gcc/ChangeLog:

PR sanitizer/99877
* gimplify.c (gimplify_expr): Right now, we unpoison all
variables before a goto <dest>. 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
gcc/testsuite/g++.dg/asan/pr99877.C [new file with mode: 0644]

index 1f417a52702014c06da99a4c4dfe00d45caba55d..b65106b14596fe173c8e8ea71fe916d3cdf75f9f 100644 (file)
@@ -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 (file)
index 0000000..95a8641
--- /dev/null
@@ -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 ();)
+    ;
+}