V2 of these patches were previously approved with a few small changes requested. For the archives, here is the version I've pushed.
Parts 1 and 2 are unchanged since V2. In part 3 (C++) I had to fix a merge problem by hand. In parts 4 and 5, I hacked up a couple tests as requested by Jakub. Part 5 (Fortran) also includes the whitespace fix Tobias pointed out, and part 6 (documentation) is new. -Sandra Sandra Loosemore (6): OpenMP: Add OMP_STRUCTURED_BLOCK and GIMPLE_OMP_STRUCTURED_BLOCK. OpenMP: C front end support for imperfectly-nested loops OpenMP: C++ support for imperfectly-nested loops OpenMP: New C/C++ testcases for imperfectly nested loops. OpenMP: Fortran support for imperfectly-nested loops OpenMP: Document support for imperfectly-nested loops. gcc/c-family/c-common.h | 1 + gcc/c-family/c-omp.cc | 151 ++ gcc/c/c-parser.cc | 860 +++++++---- gcc/cp/constexpr.cc | 1 + gcc/cp/cp-tree.h | 2 +- gcc/cp/parser.cc | 1315 ++++++++++++----- gcc/cp/parser.h | 3 + gcc/cp/pt.cc | 4 +- gcc/cp/semantics.cc | 117 +- gcc/doc/generic.texi | 14 + gcc/doc/gimple.texi | 19 + gcc/fortran/gfortran.h | 3 + gcc/fortran/openmp.cc | 763 ++++++++-- gcc/fortran/trans-stmt.cc | 7 +- gcc/gimple-low.cc | 4 + gcc/gimple-pretty-print.cc | 6 +- gcc/gimple-walk.cc | 1 + gcc/gimple.cc | 15 + gcc/gimple.def | 5 + gcc/gimple.h | 3 + gcc/gimplify.cc | 6 + gcc/omp-api.h | 32 + gcc/omp-expand.cc | 4 + gcc/omp-general.cc | 134 ++ gcc/omp-general.h | 1 + gcc/omp-low.cc | 140 +- gcc/testsuite/c-c++-common/goacc/collapse-1.c | 16 +- gcc/testsuite/c-c++-common/goacc/tile-2.c | 4 +- .../c-c++-common/gomp/imperfect-attributes.c | 81 + .../c-c++-common/gomp/imperfect-badloops.c | 50 + .../c-c++-common/gomp/imperfect-blocks.c | 75 + .../c-c++-common/gomp/imperfect-extension.c | 55 + .../c-c++-common/gomp/imperfect-gotos.c | 174 +++ .../gomp/imperfect-invalid-scope.c | 77 + .../c-c++-common/gomp/imperfect-labels.c | 85 ++ .../gomp/imperfect-legacy-syntax.c | 44 + .../c-c++-common/gomp/imperfect-pragmas.c | 85 ++ gcc/testsuite/c-c++-common/gomp/imperfect1.c | 38 + gcc/testsuite/c-c++-common/gomp/imperfect2.c | 34 + gcc/testsuite/c-c++-common/gomp/imperfect3.c | 52 + gcc/testsuite/c-c++-common/gomp/imperfect4.c | 33 + gcc/testsuite/c-c++-common/gomp/imperfect5.c | 95 ++ gcc/testsuite/g++.dg/gomp/attrs-imperfect1.C | 38 + gcc/testsuite/g++.dg/gomp/attrs-imperfect2.C | 34 + gcc/testsuite/g++.dg/gomp/attrs-imperfect3.C | 33 + gcc/testsuite/g++.dg/gomp/attrs-imperfect4.C | 33 + gcc/testsuite/g++.dg/gomp/attrs-imperfect5.C | 57 + gcc/testsuite/g++.dg/gomp/pr41967.C | 2 +- .../g++.dg/gomp/tpl-imperfect-gotos.C | 161 ++ .../g++.dg/gomp/tpl-imperfect-invalid-scope.C | 94 ++ gcc/testsuite/gcc.dg/gomp/collapse-1.c | 10 +- gcc/testsuite/gfortran.dg/gomp/collapse1.f90 | 6 +- gcc/testsuite/gfortran.dg/gomp/collapse2.f90 | 10 +- .../gfortran.dg/gomp/imperfect-gotos.f90 | 69 + .../gomp/imperfect-invalid-scope.f90 | 81 + gcc/testsuite/gfortran.dg/gomp/imperfect1.f90 | 39 + gcc/testsuite/gfortran.dg/gomp/imperfect2.f90 | 56 + gcc/testsuite/gfortran.dg/gomp/imperfect3.f90 | 45 + gcc/testsuite/gfortran.dg/gomp/imperfect4.f90 | 36 + gcc/testsuite/gfortran.dg/gomp/imperfect5.f90 | 85 ++ gcc/tree-inline.cc | 6 + gcc/tree-nested.cc | 3 + gcc/tree-pretty-print.cc | 4 + gcc/tree.def | 9 + gcc/tree.h | 3 + libgomp/libgomp.texi | 2 +- .../testsuite/libgomp.c++/attrs-imperfect1.C | 76 + .../testsuite/libgomp.c++/attrs-imperfect2.C | 114 ++ .../testsuite/libgomp.c++/attrs-imperfect3.C | 119 ++ .../testsuite/libgomp.c++/attrs-imperfect4.C | 117 ++ .../testsuite/libgomp.c++/attrs-imperfect5.C | 49 + .../testsuite/libgomp.c++/attrs-imperfect6.C | 115 ++ .../testsuite/libgomp.c++/imperfect-class-1.C | 169 +++ .../testsuite/libgomp.c++/imperfect-class-2.C | 167 +++ .../testsuite/libgomp.c++/imperfect-class-3.C | 167 +++ .../libgomp.c++/imperfect-destructor.C | 135 ++ .../libgomp.c++/imperfect-template-1.C | 172 +++ .../libgomp.c++/imperfect-template-2.C | 170 +++ .../libgomp.c++/imperfect-template-3.C | 170 +++ .../libgomp.c-c++-common/imperfect1.c | 76 + .../libgomp.c-c++-common/imperfect2.c | 114 ++ .../libgomp.c-c++-common/imperfect3.c | 119 ++ .../libgomp.c-c++-common/imperfect4.c | 117 ++ .../libgomp.c-c++-common/imperfect5.c | 49 + .../libgomp.c-c++-common/imperfect6.c | 115 ++ .../libgomp.c-c++-common/target-imperfect1.c | 81 + .../libgomp.c-c++-common/target-imperfect2.c | 122 ++ .../libgomp.c-c++-common/target-imperfect3.c | 125 ++ .../libgomp.c-c++-common/target-imperfect4.c | 122 ++ .../libgomp.fortran/imperfect-destructor.f90 | 142 ++ .../testsuite/libgomp.fortran/imperfect1.f90 | 67 + .../testsuite/libgomp.fortran/imperfect2.f90 | 102 ++ .../testsuite/libgomp.fortran/imperfect3.f90 | 110 ++ .../testsuite/libgomp.fortran/imperfect4.f90 | 121 ++ .../libgomp.fortran/target-imperfect1.f90 | 72 + .../libgomp.fortran/target-imperfect2.f90 | 110 ++ .../libgomp.fortran/target-imperfect3.f90 | 116 ++ .../libgomp.fortran/target-imperfect4.f90 | 126 ++ 98 files changed, 8359 insertions(+), 912 deletions(-) create mode 100644 gcc/omp-api.h create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-attributes.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-badloops.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-blocks.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-extension.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-gotos.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-invalid-scope.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-labels.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-legacy-syntax.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect-pragmas.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect1.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect2.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect3.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect4.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect5.c create mode 100644 gcc/testsuite/g++.dg/gomp/attrs-imperfect1.C create mode 100644 gcc/testsuite/g++.dg/gomp/attrs-imperfect2.C create mode 100644 gcc/testsuite/g++.dg/gomp/attrs-imperfect3.C create mode 100644 gcc/testsuite/g++.dg/gomp/attrs-imperfect4.C create mode 100644 gcc/testsuite/g++.dg/gomp/attrs-imperfect5.C create mode 100644 gcc/testsuite/g++.dg/gomp/tpl-imperfect-gotos.C create mode 100644 gcc/testsuite/g++.dg/gomp/tpl-imperfect-invalid-scope.C create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect-gotos.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect-invalid-scope.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect1.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect2.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect3.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect4.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect5.f90 create mode 100644 libgomp/testsuite/libgomp.c++/attrs-imperfect1.C create mode 100644 libgomp/testsuite/libgomp.c++/attrs-imperfect2.C create mode 100644 libgomp/testsuite/libgomp.c++/attrs-imperfect3.C create mode 100644 libgomp/testsuite/libgomp.c++/attrs-imperfect4.C create mode 100644 libgomp/testsuite/libgomp.c++/attrs-imperfect5.C create mode 100644 libgomp/testsuite/libgomp.c++/attrs-imperfect6.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-class-1.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-class-2.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-class-3.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-destructor.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-template-1.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-template-2.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-template-3.C create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect1.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect2.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect3.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect4.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect5.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect6.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect1.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect2.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect3.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect4.c create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect-destructor.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect2.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect3.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect4.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect2.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect3.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect4.f90 -- 2.31.1