aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2015-03-19 08:55:22 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2015-03-19 08:55:22 +0100
commit02703f4c0fef1a978c555ebf1abe9c4760164a7d (patch)
treeb994b9d74da28c04467a3438fe31519683dca726
parentbfd714822b2c97dfcc970c722f430ca995eebafc (diff)
downloadgcc-02703f4c0fef1a978c555ebf1abe9c4760164a7d.zip
gcc-02703f4c0fef1a978c555ebf1abe9c4760164a7d.tar.gz
gcc-02703f4c0fef1a978c555ebf1abe9c4760164a7d.tar.bz2
re PR sanitizer/64265 (r217669 broke tsan)
PR sanitizer/64265 * g++.dg/tsan/pr64265.C: New test. From-SVN: r221509
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/tsan/pr64265.C54
2 files changed, 57 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 405eaeb..756baf3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2015-03-19 Jakub Jelinek <jakub@redhat.com>
+ PR sanitizer/64265
+ * g++.dg/tsan/pr64265.C: New test.
+
PR sanitizer/65400
* c-c++-common/tsan/pr65400-1.c: New test.
* c-c++-common/tsan/pr65400-2.c: New test.
diff --git a/gcc/testsuite/g++.dg/tsan/pr64265.C b/gcc/testsuite/g++.dg/tsan/pr64265.C
new file mode 100644
index 0000000..fde32e7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tsan/pr64265.C
@@ -0,0 +1,54 @@
+// PR sanitizer/64265
+// { dg-shouldfail "tsan" }
+// { dg-additional-options "-fno-omit-frame-pointer -ldl" }
+
+#include <pthread.h>
+#include "tsan_barrier.h"
+
+static pthread_barrier_t barrier;
+int v;
+
+__attribute__((noinline, noclone)) int
+foo (int x)
+{
+ if (x < 99)
+ throw x;
+ barrier_wait (&barrier);
+ v++;
+ return x;
+}
+
+__attribute__((noinline, noclone)) void
+bar (void)
+{
+ for (int i = 0; i < 100; i++)
+ try
+ {
+ foo (i);
+ }
+ catch (int)
+ {
+ }
+}
+
+__attribute__((noinline, noclone)) void *
+tf (void *)
+{
+ bar ();
+ return NULL;
+}
+
+int
+main ()
+{
+ pthread_t th;
+ barrier_init (&barrier, 2);
+ if (pthread_create (&th, NULL, tf, NULL))
+ return 0;
+ v++;
+ barrier_wait (&barrier);
+ pthread_join (th, NULL);
+ return 0;
+}
+
+// { dg-output "WARNING: ThreadSanitizer: data race.*#2 _?(tf|_Z2tfPv)" }