diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-03-06 18:28:54 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-03-06 18:28:54 +0100 |
commit | 251923f5e4950ce2e43020f663723f84b7cfe31a (patch) | |
tree | 47a7934fccf7b621bf8bfc543f09205c27cf5284 /libgomp | |
parent | e8645a4001a8d117dd336ea75942aac49101af49 (diff) | |
download | gcc-251923f5e4950ce2e43020f663723f84b7cfe31a.tar.gz |
gimplify.c (goa_lhs_expr_p): Allow different ADDR_EXPR nodes for the same VAR_DECL.
* gimplify.c (goa_lhs_expr_p): Allow different ADDR_EXPR nodes
for the same VAR_DECL.
* testsuite/libgomp.c/atomic-3.c: New test.
From-SVN: r132977
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 6 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.c/atomic-3.c | 50 |
2 files changed, 55 insertions, 1 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 6e978d912d0..84c70491ece 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,7 +1,11 @@ +2008-03-06 Jakub Jelinek <jakub@redhat.com> + + * testsuite/libgomp.c/atomic-3.c: New test. + 2008-03-03 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> PR fortran/33197 - * libgomp/testsuite/libgomp.fortran/fortran.exp: Add .f08 and + * testsuite/libgomp.fortran/fortran.exp: Add .f08 and .F08 file suffixes. 2008-03-03 Peter O'Gorman <pogma@thewrittenword.com> diff --git a/libgomp/testsuite/libgomp.c/atomic-3.c b/libgomp/testsuite/libgomp.c/atomic-3.c new file mode 100644 index 00000000000..5b8fdc1a79e --- /dev/null +++ b/libgomp/testsuite/libgomp.c/atomic-3.c @@ -0,0 +1,50 @@ +/* { dg-do run } */ +/* { dg-options "-fopenmp -O0" } */ + +#include <omp.h> +#include <stdlib.h> + +short e[64]; +int g; +_Complex double d, f; +int num_threads; + +__attribute__((noinline)) void +foo (int x, long long y) +{ +#pragma omp parallel num_threads (4) + { + int i; + #pragma omp barrier + for (i = 0; i < 2400; i++) + { + if (i == 0) + num_threads = omp_get_num_threads (); + #pragma omp atomic + e[0] += x; + #pragma omp atomic + e[16] += x; + #pragma omp atomic + g += y; + #pragma omp atomic + __real__ d += x; + #pragma omp atomic + __imag__ f += x; + } + } +} + +int +main (void) +{ + int i; + foo (3, 3LL); + if (g != 3 * 2400 * num_threads + || __real__ d != g || __imag__ d != 0 + || __real__ f != 0 || __imag__ f != g) + abort (); + for (i = 0; i < 64; i++) + if (e[i] != ((i && i != 16) ? 0 : g)) + abort (); + return 0; +} |