diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/omp-expand.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/gomp/scope-3.c | 21 |
2 files changed, 29 insertions, 2 deletions
diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 159ae0e..496c0e6 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -8433,11 +8433,17 @@ expand_omp_single (struct omp_region *region) exit_bb = region->exit; si = gsi_last_nondebug_bb (entry_bb); - gcc_assert (gimple_code (gsi_stmt (si)) == GIMPLE_OMP_SINGLE - || gimple_code (gsi_stmt (si)) == GIMPLE_OMP_SCOPE); + enum gimple_code code = gimple_code (gsi_stmt (si)); + gcc_assert (code == GIMPLE_OMP_SINGLE || code == GIMPLE_OMP_SCOPE); gsi_remove (&si, true); single_succ_edge (entry_bb)->flags = EDGE_FALLTHRU; + if (exit_bb == NULL) + { + gcc_assert (code == GIMPLE_OMP_SCOPE); + return; + } + si = gsi_last_nondebug_bb (exit_bb); if (!gimple_omp_return_nowait_p (gsi_stmt (si))) { diff --git a/gcc/testsuite/c-c++-common/gomp/scope-3.c b/gcc/testsuite/c-c++-common/gomp/scope-3.c new file mode 100644 index 0000000..78bb1a3 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/scope-3.c @@ -0,0 +1,21 @@ +/* PR middle-end/102415 */ + +extern +#ifdef __cplusplus +"C" +#endif +void abort (); + +void +foo (void) +{ + #pragma omp scope nowait + abort (); +} + +void +bar (void) +{ + #pragma omp scope + abort (); +} |