diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2012-09-07 16:00:07 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2012-09-07 16:00:07 +0000 |
commit | c294eb47b25bcf24bacfbcdecedda5651124f54c (patch) | |
tree | 3085fbec07c3acbff698efa8be5b579522208fbb | |
parent | b12b5029cbf1a802565598511dd073f1afbe2840 (diff) | |
download | gcc-c294eb47b25bcf24bacfbcdecedda5651124f54c.zip gcc-c294eb47b25bcf24bacfbcdecedda5651124f54c.tar.gz gcc-c294eb47b25bcf24bacfbcdecedda5651124f54c.tar.bz2 |
re PR testsuite/54184 (gcc.dg/pr52558-1.c failure)
PR testsuite/54184
* gcc.dg/pr52558-1.c: Delete.
* gcc.dg/simulate-thread/speculative-store-2.c: New.
From-SVN: r191079
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr52558-1.c | 22 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c | 74 |
3 files changed, 80 insertions, 22 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ff3583f..e4ea111 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-09-07 Aldy Hernandez <aldyh@redhat.com> + + PR testsuite/54184 + * gcc.dg/pr52558-1.c: Delete. + * gcc.dg/simulate-thread/speculative-store-2.c: New. + 2012-09-07 Richard Earnshaw <rearnsha@arm.com> * gcc.target/arm/pr50318-1.c: Scan for smlal. diff --git a/gcc/testsuite/gcc.dg/pr52558-1.c b/gcc/testsuite/gcc.dg/pr52558-1.c deleted file mode 100644 index c34ad06..0000000 --- a/gcc/testsuite/gcc.dg/pr52558-1.c +++ /dev/null @@ -1,22 +0,0 @@ -/* { dg-do compile } */ -/* { dg-options "--param allow-store-data-races=0 -O2 -fdump-tree-lim1" } */ - -/* Test that `count' is not written to unless p->data > 0. */ - -int count; - -struct obj { - int data; - struct obj *next; -} *q; - -void func() -{ - struct obj *p; - for (p = q; p; p = p->next) - if (p->data > 0) - count++; -} - -/* { dg-final { scan-tree-dump-times "MEM count_lsm.. count_lsm_flag" 1 "lim1" } } */ -/* { dg-final { cleanup-tree-dump "lim1" } } */ diff --git a/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c new file mode 100644 index 0000000..d4d28f5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/simulate-thread/speculative-store-2.c @@ -0,0 +1,74 @@ +/* { dg-do link } */ +/* { dg-options "--param allow-store-data-races=0 -O2" } */ +/* { dg-final { simulate-thread } } */ + +#include <stdio.h> +#include <stdlib.h> + +#include "simulate-thread.h" + +/* Test that speculative stores do not happen for --param + allow-store-data-races=0. */ + +int count, insns; + +struct obj { + int data; + struct obj *next; +} *q; + +void simulate_thread_other_threads () +{ + ++insns; + ++count; +} + +int simulate_thread_step_verify () +{ + return 0; +} + +int simulate_thread_final_verify () +{ + /* If count != insns, someone must have cached `count' and stored a + racy value into it. */ + if (count != insns) + { + printf("FAIL: count was incorrectly cached\n"); + return 1; + } + return 0; +} + +/* Test that `count' is not written to unless p->data > 0. */ + +__attribute__((noinline)) +void simulate_thread_main() +{ + struct obj *p; + for (p = q; p; p = p->next) + if (p->data > 0) + count++; +} + +struct obj * +insert(struct obj *head, int data) +{ + struct obj *t = (struct obj *) malloc (sizeof (struct obj)); + t->next = head; + t->data = data; + return t; +} + +int main() +{ + q = insert (0, 0); + q = insert (q, 0); + q = insert (q, 0); + q = insert (q, 0); + q = insert (q, 0); + + simulate_thread_main (); + simulate_thread_done (); + return 0; +} |