diff options
| author | Jakub Jelinek <jakub@redhat.com> | 2008-12-08 11:36:01 +0100 |
|---|---|---|
| committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2008-12-08 11:36:01 +0100 |
| commit | d9c194cb9ef4c1a9263af6c28267104f4ce3628e (patch) | |
| tree | afeb602ff89a718fac03904e6d621cdacaf590a5 /libgomp | |
| parent | 4e1e3eda6b83b091b227dad1c029d18ab6501f91 (diff) | |
| download | gcc-d9c194cb9ef4c1a9263af6c28267104f4ce3628e.tar.gz gcc-d9c194cb9ef4c1a9263af6c28267104f4ce3628e.tar.bz2 gcc-d9c194cb9ef4c1a9263af6c28267104f4ce3628e.zip | |
re PR middle-end/36802 (pop_gimplify_context ICE using openmp task construct)
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.
From-SVN: r142546
Diffstat (limited to 'libgomp')
| -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 |
4 files changed, 133 insertions, 0 deletions
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; +} |
