diff options
author | Jakub Jelinek <jakub@redhat.com> | 2008-03-12 10:55:48 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-03-12 10:55:48 +0100 |
commit | 7c8f7639c5512799bed5c441e06964bd4ca32961 (patch) | |
tree | cda5526042cb74fb68ccf75d855c64c449f59a35 /libgomp | |
parent | 628781031e0b4f75bb9a59a045b5ed2a4daf568b (diff) | |
download | gcc-7c8f7639c5512799bed5c441e06964bd4ca32961.zip gcc-7c8f7639c5512799bed5c441e06964bd4ca32961.tar.gz gcc-7c8f7639c5512799bed5c441e06964bd4ca32961.tar.bz2 |
re PR middle-end/35549 (Invalid use of copy-in/out for shared vars in nested parallels)
PR middle-end/35549
* omp-low.c (maybe_lookup_decl): Constify first argument.
(use_pointer_for_field): Change last argument from bool to
omp_context *. Disallow shared copy-in/out in nested
parallel if decl is shared in outer parallel too.
(build_outer_var_ref, scan_sharing_clauses,
lower_rec_input_clauses, lower_copyprivate_clauses,
lower_send_clauses, lower_send_shared_vars): Adjust callers.
* testsuite/libgomp.c/pr35549.c: New test.
From-SVN: r133136
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/ChangeLog | 5 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.c/pr35549.c | 30 |
2 files changed, 35 insertions, 0 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 84c7049..3078243 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2008-03-12 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/35549 + * testsuite/libgomp.c/pr35549.c: New test. + 2008-03-06 Jakub Jelinek <jakub@redhat.com> * testsuite/libgomp.c/atomic-3.c: New test. diff --git a/libgomp/testsuite/libgomp.c/pr35549.c b/libgomp/testsuite/libgomp.c/pr35549.c new file mode 100644 index 0000000..269a0c2 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr35549.c @@ -0,0 +1,30 @@ +/* PR middle-end/35549 */ +/* { dg-do run } */ + +#include <omp.h> +#include <stdlib.h> + +int +main (void) +{ + int i = 6, n = 0; + omp_set_dynamic (0); + omp_set_nested (1); + #pragma omp parallel shared (i) num_threads (3) + { + if (omp_get_num_threads () != 3) + #pragma omp atomic + n += 1; + #pragma omp parallel shared (i) num_threads (4) + { + if (omp_get_num_threads () != 4) + #pragma omp atomic + n += 1; + #pragma omp critical + i += 1; + } + } + if (n == 0 && i != 6 + 3 * 4) + abort (); + return 0; +} |