[flang-commits] [flang] [flang] Legacy ASSIGN statement target processing (PR #133737)
via flang-commits
flang-commits at lists.llvm.org
Mon Mar 31 08:31:05 PDT 2025
https://github.com/vdonaldson created https://github.com/llvm/llvm-project/pull/133737
Like other target statements, the statement associated with the label in a legacy ASSIGN statement could be inside a construct. Constructs containing such a target must therefore be marked as unstructured, fairly similar to how targets are processed in `markBranchTarget`.
>From e5c41f70fc42715fdb720b91daa9ffd458a736a4 Mon Sep 17 00:00:00 2001
From: V Donaldson <vdonaldson at nvidia.com>
Date: Mon, 31 Mar 2025 07:59:04 -0700
Subject: [PATCH] [flang] Legacy ASSIGN statement target processing
Like other target statements, the statement associated with the label
in a legacy ASSIGN statement could be inside a construct. Constructs
containing such a target must therefore be marked as unstructured,
fairly similar to how targets are processed in `markBranchTarget`.
---
flang/lib/Lower/PFTBuilder.cpp | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/flang/lib/Lower/PFTBuilder.cpp b/flang/lib/Lower/PFTBuilder.cpp
index 41bdff4dca471..2cc458cb6130d 100644
--- a/flang/lib/Lower/PFTBuilder.cpp
+++ b/flang/lib/Lower/PFTBuilder.cpp
@@ -878,8 +878,18 @@ class PFTBuilder {
lower::pft::Evaluation *target{
labelEvaluationMap->find(label)->second};
assert(target && "missing branch target evaluation");
- if (!target->isA<parser::FormatStmt>())
+ if (!target->isA<parser::FormatStmt>()) {
target->isNewBlock = true;
+ for (lower::pft::Evaluation *parent = target->parentConstruct;
+ parent; parent = parent->parentConstruct) {
+ parent->isUnstructured = true;
+ // The exit of an enclosing DO or IF construct is a new block.
+ if (parent->constructExit &&
+ (parent->isA<parser::DoConstruct>() ||
+ parent->isA<parser::IfConstruct>()))
+ parent->constructExit->isNewBlock = true;
+ }
+ }
auto iter = assignSymbolLabelMap->find(*sym);
if (iter == assignSymbolLabelMap->end()) {
lower::pft::LabelSet labelSet{};
More information about the flang-commits
mailing list