diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-12-04 09:47:13 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-12-04 09:47:13 +0100 |
commit | a8a5f4cc04c802d74176f6935509b8a4303de399 (patch) | |
tree | e1fbf1849c99714c9827523641f902da451ba489 /gcc | |
parent | c96828f1ec5bb54524697bd0f3fb22088fda5342 (diff) | |
download | gcc-a8a5f4cc04c802d74176f6935509b8a4303de399.zip gcc-a8a5f4cc04c802d74176f6935509b8a4303de399.tar.gz gcc-a8a5f4cc04c802d74176f6935509b8a4303de399.tar.bz2 |
re PR fortran/92756 (ICE in lower_omp, at omp-low.c:12988)
PR fortran/92756
* trans-openmp.c (gfc_trans_omp_teams): Wrap OMP_TEAMS body into a
BIND_EXPR with a forced BLOCK.
* gfortran.dg/gomp/teams1.f90: New test.
* testsuite/libgomp.fortran/teams1.f90: New test.
* testsuite/libgomp.fortran/teams2.f90: New test.
From-SVN: r278956
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-openmp.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/gomp/teams1.f90 | 8 |
4 files changed, 28 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a29d422..3a188ba 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-12-04 Jakub Jelinek <jakub@redhat.com> + + PR fortran/92756 + * trans-openmp.c (gfc_trans_omp_teams): Wrap OMP_TEAMS body into a + BIND_EXPR with a forced BLOCK. + 2019-11-30 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/91783 diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c index d9dfcab..3a4f962 100644 --- a/gcc/fortran/trans-openmp.c +++ b/gcc/fortran/trans-openmp.c @@ -4858,10 +4858,14 @@ gfc_trans_omp_teams (gfc_code *code, gfc_omp_clauses *clausesa, gfc_split_omp_clauses (code, clausesa); } if (flag_openmp) - omp_clauses - = chainon (omp_clauses, - gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_TEAMS], - code->loc)); + { + omp_clauses + = chainon (omp_clauses, + gfc_trans_omp_clauses (&block, + &clausesa[GFC_OMP_SPLIT_TEAMS], + code->loc)); + pushlevel (); + } switch (code->op) { case EXEC_OMP_TARGET_TEAMS: @@ -4881,6 +4885,7 @@ gfc_trans_omp_teams (gfc_code *code, gfc_omp_clauses *clausesa, } if (flag_openmp) { + stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0)); stmt = build2_loc (input_location, OMP_TEAMS, void_type_node, stmt, omp_clauses); if (combined) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8ae30c2..8f3edaf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-12-04 Jakub Jelinek <jakub@redhat.com> + + PR fortran/92756 + * gfortran.dg/gomp/teams1.f90: New test. + 2019-12-03 Jakub Jelinek <jakub@redhat.com> * g++.dg/cpp2a/srcloc1.C: New test. diff --git a/gcc/testsuite/gfortran.dg/gomp/teams1.f90 b/gcc/testsuite/gfortran.dg/gomp/teams1.f90 new file mode 100644 index 0000000..21101cd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/teams1.f90 @@ -0,0 +1,8 @@ +! PR fortran/92756 + +program pr92756 + integer :: i + !$omp teams distribute parallel do + do i = 1, 64 + end do +end |