diff options
author | Jakub Jelinek <jakub@redhat.com> | 2015-03-19 08:55:22 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2015-03-19 08:55:22 +0100 |
commit | 02703f4c0fef1a978c555ebf1abe9c4760164a7d (patch) | |
tree | b994b9d74da28c04467a3438fe31519683dca726 | |
parent | bfd714822b2c97dfcc970c722f430ca995eebafc (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tsan/pr64265.C | 54 |
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)" } |