On Sun, Jul 23, 2023 at 04:15:17PM -0600, Sandra Loosemore wrote: > In order to detect invalid jumps in and out of intervening code in > imperfectly-nested loops, the front ends need to insert some sort of > marker to identify the structured block sequences that they push into > the inner body of the loop. The error checking happens in the > diagnose_omp_blocks pass, between gimplification and OMP lowering, so > we need both GENERIC and GIMPLE representations of these markers. > They are removed in OMP lowering so no subsequent passes need to know > about them. > > This patch doesn't include any front-end changes to generate the new > data structures. > > gcc/cp/ChangeLog > * constexpr.cc (cxx_eval_constant_expression): Handle > OMP_STRUCTURED_BLOCK. > * pt.cc (tsubst_expr): Likewise. > > gcc/ChangeLog > * doc/generic.texi (OpenMP): Document OMP_STRUCTURED_BLOCK. > * doc/gimple.texi (GIMPLE instruction set): Add > GIMPLE_OMP_STRUCTURED_BLOCK. > (GIMPLE_OMP_STRUCTURED_BLOCK): New subsection. > * gimple-low.cc (lower_stmt): Error on GIMPLE_OMP_STRUCTURED_BLOCK. > * gimple-pretty-print.cc (dump_gimple_omp_block): Handle > GIMPLE_OMP_STRUCTURED_BLOCK. > (pp_gimple_stmt_1): Likewise. > * gimple-walk.cc (walk_gimple_stmt): Likewise. > * gimple.cc (gimple_build_omp_structured_block): New. > * gimple.def (GIMPLE_OMP_STRUCTURED_BLOCK): New. > * gimple.h (gimple_build_omp_structured_block): Declare. > (gimple_has_substatements): Handle GIMPLE_OMP_STRUCTURED_BLOCK. > (CASE_GIMPLE_OMP): Likewise. > * gimplify.cc (is_gimple_stmt): Handle OMP_STRUCTURED_BLOCK. > (gimplify_expr): Likewise. > * omp-expand.cc (GIMPLE_OMP_STRUCTURED_BLOCK): Error on > GIMPLE_OMP_STRUCTURED_BLOCK. > * omp-low.cc (scan_omp_1_stmt): Handle GIMPLE_OMP_STRUCTURED_BLOCK. > (lower_omp_1): Likewise. > (diagnose_sb_1): Likewise. > (diagnose_sb_2): Likewise. > * tree-inline.cc (remap_gimple_stmt): Handle > GIMPLE_OMP_STRUCTURED_BLOCK. > (estimate_num_insns): Likewise. > * tree-nested.cc (convert_nonlocal_reference_stmt): Likewise. > (convert_local_reference_stmt): Likewise. > (convert_gimple_call): Likewise. > * tree-pretty-print.cc (dump_generic_node): Handle > OMP_STRUCTURED_BLOCK. > * tree.def (OMP_STRUCTURED_BLOCK): New. > * tree.h (OMP_STRUCTURED_BLOCK_BODY): New. > --- a/gcc/gimple-low.cc > +++ b/gcc/gimple-low.cc > @@ -717,6 +717,11 @@ lower_stmt (gimple_stmt_iterator *gsi, struct lower_data > *data) > gsi_next (gsi); > return; > > + case GIMPLE_OMP_STRUCTURED_BLOCK: > + /* These are supposed to be removed already in OMP lowering. */ > + gcc_unreachable (); > + break;
Please don't add break; after gcc_unreachable (); > --- a/gcc/omp-expand.cc > +++ b/gcc/omp-expand.cc > @@ -10592,6 +10592,11 @@ expand_omp (struct omp_region *region) > parent GIMPLE_OMP_SECTIONS region. */ > break; > > + case GIMPLE_OMP_STRUCTURED_BLOCK: > + /* We should have gotten rid of these in gimple lowering. */ > + gcc_unreachable (); > + break; And here neither. Otherwise LGTM. Jakub