[flang-commits] [flang] [flang] Fix crash with coarray teams #171048 (PR #172259)
via flang-commits
flang-commits at lists.llvm.org
Mon Dec 15 06:00:16 PST 2025
================
@@ -4082,29 +4082,45 @@ class FirConverter : public Fortran::lower::AbstractConverter {
void genFIR(const Fortran::parser::ChangeTeamConstruct &construct) {
Fortran::lower::StatementContext stmtCtx;
pushActiveConstruct(getEval(), stmtCtx);
+ Fortran::lower::pft::Evaluation &eval = getEval();
+ bool unstructuredContext = eval.lowerAsUnstructured();
- for (Fortran::lower::pft::Evaluation &e :
- getEval().getNestedEvaluations()) {
- if (e.getIf<Fortran::parser::ChangeTeamStmt>()) {
- maybeStartBlock(e.block);
- setCurrentPosition(e.position);
- genFIR(e);
- } else if (e.getIf<Fortran::parser::EndChangeTeamStmt>()) {
- maybeStartBlock(e.block);
- setCurrentPosition(e.position);
- genFIR(e);
- } else {
- genFIR(e);
- }
+ // CHANGE TEAM statement
+ Fortran::lower::pft::Evaluation &changeTeamStmtEval =
+ eval.getFirstNestedEvaluation();
+ auto *changeTeamStmt =
+ changeTeamStmtEval.getIf<Fortran::parser::ChangeTeamStmt>();
+ mif::ChangeTeamOp changeOp =
+ genChangeTeamStmt(*this, changeTeamStmtEval, *changeTeamStmt);
+ mlir::Block *entryBlock = changeOp.getBody();
+ builder->setInsertionPointToStart(entryBlock);
+
+ if (unstructuredContext)
+ Fortran::lower::createEmptyRegionBlocks<mif::EndTeamOp>(
+ *builder, eval.getNestedEvaluations());
+ builder->setInsertionPointToStart(entryBlock);
+
+ // CHANGE TEAM body code.
+ auto iter = eval.getNestedEvaluations().begin()++;
+ for (auto end = --eval.getNestedEvaluations().end(); iter != end; ++iter) {
----------------
jeanPerier wrote:
nit: no braces needed.
https://github.com/llvm/llvm-project/pull/172259
More information about the flang-commits
mailing list