On Sat, Jul 20, 2024 at 02:42:26PM -0600, Sandra Loosemore wrote: > This patch adds support for metadirectives to the Fortran front end. > + else if (c->op == EXEC_OMP_METADIRECTIVE) > + { > + gfc_omp_variant *variant > + = c->ext.omp_variants;
Why two lines? This is short enough to fit on one. > + if (begin_p && directive != ST_NONE > + && gfc_omp_end_stmt (directive) == ST_NONE) When the whole condition doesn't fit on one line, each && (or ||) should be on a separate line. > + gfc_error ( > + "Unexpected %s statement in an OMP METADIRECTIVE block at %C", > + gfc_ascii_statement (st)); Please avoid calls with opening ( at end of line if possible, they are too ugly. gfc_error ("Unexpected %s statement in an OMP METADIRECTIVE " "block at %C", gfc_ascii_statement (st)); looks better. > + case ST_OMP_END_METADIRECTIVE: > + if (gfc_state_stack->state == COMP_OMP_BEGIN_METADIRECTIVE) > + { > + st = next_statement (); > + return st; > + } > + /* FALLTHRU */ When the stmt to fall through is just return st;, /* FALLTHRU */ seems unnecessary. Just do if (gfc_state_stack->state == COMP_OMP_BEGIN_METADIRECTIVE) return next_statement (); else return st; > + > default: > return st; > } > --- a/gcc/fortran/trans-decl.cc > +++ b/gcc/fortran/trans-decl.cc > @@ -331,7 +331,10 @@ gfc_get_label_decl (gfc_st_label * lp) > gcc_assert (lp != NULL && lp->value <= MAX_LABEL_VALUE); > > /* Build a mangled name for the label. */ > - sprintf (label_name, "__label_%.6d", lp->value); > + if (lp->omp_region) > + sprintf (label_name, "__label_%d_%.6d", lp->omp_region, lp->value); > + else > + sprintf (label_name, "__label_%.6d", lp->value); Makes me wonder what will happen if there are nested metadirectives (or is omp_region unique in the whole function or TU rather than just in one metadirective)? !$omp metadirective ... say conditional teams here !$omp metadirective ... say conditional parallel here some code that needs labels !$omp end metadirective !$omp end metadirective Jakub