From 5771c3915bedb3e92b79a7e81fa5eac751cd7413 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 3 Oct 2014 09:29:42 +0200 Subject: re PR libgomp/61200 (internal compiler error: Segmentation fault, assert & openmp) PR libgomp/61200 * omp-low.c (taskreg_contexts): New variable. (scan_omp_parallel): Push newly created context into taskreg_contexts vector and move record layout code to finish_taskreg_scan. (scan_omp_task): Likewise. (finish_taskreg_scan): New function. (execute_lower_omp): Call finish_taskreg_scan on all taskreg_contexts vector elements and release it. * c-c++-common/gomp/pr61200.c: New test. * testsuite/libgomp.c/pr61200.c: New test. From-SVN: r215835 --- libgomp/testsuite/libgomp.c/pr61200.c | 87 +++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 libgomp/testsuite/libgomp.c/pr61200.c (limited to 'libgomp/testsuite/libgomp.c') diff --git a/libgomp/testsuite/libgomp.c/pr61200.c b/libgomp/testsuite/libgomp.c/pr61200.c new file mode 100644 index 0000000..ba3ed37 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr61200.c @@ -0,0 +1,87 @@ +/* PR libgomp/61200 */ +/* { dg-do run } */ + +#include +#include +#include + +volatile int x; + +void +foo () +{ + int var = 1; + int i; + + for (i = 0; i < 2; i++) + { + if (i == 1) + { + #pragma omp parallel num_threads(2) + if (x) + var++; + else + { + #pragma omp single + sleep (2); + } + } + else + { + #pragma omp task shared(var) + { + sleep (1); + var = 2; + } + } + } + #pragma omp taskwait + if (var != 2) + abort (); +} + +void +bar () +{ + int var = 1; + int i; + + for (i = 0; i < 2; i++) + { + if (i == 0) + { + #pragma omp task shared(var) + { + sleep (1); + var = 2; + } + } + else + { + #pragma omp parallel num_threads(2) + if (x) + var++; + else + { + #pragma omp single + sleep (2); + } + } + } + #pragma omp taskwait + if (var != 2) + abort (); +} + +int +main () +{ + omp_set_nested (1); + #pragma omp parallel num_threads(2) + #pragma omp single + foo (); + #pragma omp parallel num_threads(2) + #pragma omp single + bar (); + return 0; +} -- cgit v1.1