diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-08 10:36:01 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-12-08 10:36:01 +0000 |
| commit | 0cb159ec52b4176ce3132ffaba7ff46fcf78ac92 (patch) | |
| tree | afeb602ff89a718fac03904e6d621cdacaf590a5 | |
| parent | 1e483c5745ebf4d3bfc7282804880a2e3d5cb8c5 (diff) | |
| download | ppe42-gcc-0cb159ec52b4176ce3132ffaba7ff46fcf78ac92.tar.gz ppe42-gcc-0cb159ec52b4176ce3132ffaba7ff46fcf78ac92.zip | |
PR middle-end/36802
* omp-low.c (use_pointer_for_field): Only call maybe_lookup_decl
on parallel and task contexts.
* testsuite/libgomp.c/pr36802-1.c: New test.
* testsuite/libgomp.c/pr36802-2.c: New test.
* testsuite/libgomp.c/pr36802-3.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142546 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/omp-low.c | 4 | ||||
| -rw-r--r-- | libgomp/ChangeLog | 7 | ||||
| -rw-r--r-- | libgomp/testsuite/libgomp.c/pr36802-1.c | 34 | ||||
| -rw-r--r-- | libgomp/testsuite/libgomp.c/pr36802-2.c | 46 | ||||
| -rw-r--r-- | libgomp/testsuite/libgomp.c/pr36802-3.c | 46 |
6 files changed, 141 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b530d25614a..ed541f12220 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-12-08 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/36802 + * omp-low.c (use_pointer_for_field): Only call maybe_lookup_decl + on parallel and task contexts. + 2008-12-07 Eric Botcazou <ebotcazou@adacore.com> * gimple.c (recalculate_side_effects) <tcc_constant>: New case. diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 8781418bd82..b7885e6cf3c 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -760,10 +760,10 @@ use_pointer_for_field (tree decl, omp_context *shared_ctx) omp_context *up; for (up = shared_ctx->outer; up; up = up->outer) - if (maybe_lookup_decl (decl, up)) + if (is_taskreg_ctx (up) && maybe_lookup_decl (decl, up)) break; - if (up && is_taskreg_ctx (up)) + if (up) { tree c; diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 46536c88381..98a307314a9 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,10 @@ +2008-12-08 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/36802 + * testsuite/libgomp.c/pr36802-1.c: New test. + * testsuite/libgomp.c/pr36802-2.c: New test. + * testsuite/libgomp.c/pr36802-3.c: New test. + 2008-12-01 Janis Johnson <janis187@us.ibm.com> PR libgomp/38270 diff --git a/libgomp/testsuite/libgomp.c/pr36802-1.c b/libgomp/testsuite/libgomp.c/pr36802-1.c new file mode 100644 index 00000000000..4ed5e12769b --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr36802-1.c @@ -0,0 +1,34 @@ +/* PR middle-end/36802 */ + +extern void abort (void); + +int +foo (int k) +{ + int i = 0; +#pragma omp parallel + #pragma omp single + { + if (!k) + { + int j; + for (j = 0; j < 10; j++) + #pragma omp task + if (j == 4) + i++; + } + else + i++; + } + return i; +} + +int +main (void) +{ + if (foo (0) != 1) + abort (); + if (foo (1) != 1) + abort (); + return 0; +} diff --git a/libgomp/testsuite/libgomp.c/pr36802-2.c b/libgomp/testsuite/libgomp.c/pr36802-2.c new file mode 100644 index 00000000000..06e792f0f14 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr36802-2.c @@ -0,0 +1,46 @@ +/* PR middle-end/36802 */ + +extern void abort (void); + +int q; + +int +foo (int k) +{ + int i = 6, n = 0; + omp_set_dynamic (0); + omp_set_nested (1); +#pragma omp parallel shared (i) num_threads (3) + { + int l; + + if (omp_get_num_threads () != 3) + #pragma omp atomic + n += 1; + else + #pragma omp for + for (l = 0; l < 3; l++) + if (k) + #pragma omp atomic + q += i; + else + #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; +} + +int +main (void) +{ + foo (0); + return 0; +} diff --git a/libgomp/testsuite/libgomp.c/pr36802-3.c b/libgomp/testsuite/libgomp.c/pr36802-3.c new file mode 100644 index 00000000000..f11baa09f57 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr36802-3.c @@ -0,0 +1,46 @@ +/* PR middle-end/36802 */ + +extern void abort (void); + +int q; + +int +foo (int k) +{ + int i = 6, n = 0; + omp_set_dynamic (0); + omp_set_nested (1); +#pragma omp parallel shared (i) num_threads (3) + { + int l; + + if (omp_get_num_threads () != 3) + #pragma omp atomic + n += 1; + else + #pragma omp for + for (l = 0; l < 3; l++) + if (!k) + #pragma omp parallel shared (i) num_threads (4) + { + if (omp_get_num_threads () != 4) + #pragma omp atomic + n += 1; + #pragma omp critical + i += 1; + } + else + #pragma omp atomic + q += i; + } + if (n == 0 && i != 6 + 3 * 4) + abort (); + return 0; +} + +int +main (void) +{ + foo (0); + return 0; +} |

