[flang-commits] [flang] c113036 - [Flang] Fix a crash when equivalence and namelist statements are used (#150081)
via flang-commits
flang-commits at lists.llvm.org
Wed Jul 23 07:17:33 PDT 2025
Author: Carlos Seo
Date: 2025-07-23T11:17:29-03:00
New Revision: c1130360902082e5d11fcf9a6a4ddd5dfc1a8ec9
URL: https://github.com/llvm/llvm-project/commit/c1130360902082e5d11fcf9a6a4ddd5dfc1a8ec9
DIFF: https://github.com/llvm/llvm-project/commit/c1130360902082e5d11fcf9a6a4ddd5dfc1a8ec9.diff
LOG: [Flang] Fix a crash when equivalence and namelist statements are used (#150081)
Check for equivalence when generating namelist descriptors in IO.cpp.
Fixes #124489
Added:
flang/test/Lower/equivalence-3.f
Modified:
flang/lib/Lower/IO.cpp
Removed:
################################################################################
diff --git a/flang/lib/Lower/IO.cpp b/flang/lib/Lower/IO.cpp
index c95c3404a8e26..51f192ec08fe6 100644
--- a/flang/lib/Lower/IO.cpp
+++ b/flang/lib/Lower/IO.cpp
@@ -468,8 +468,10 @@ getNamelistGroup(Fortran::lower::AbstractConverter &converter,
fir::BoxType boxTy =
fir::BoxType::get(fir::PointerType::get(converter.genType(s)));
auto descFunc = [&](fir::FirOpBuilder &b) {
+ bool couldBeInEquivalence =
+ Fortran::semantics::FindEquivalenceSet(s) != nullptr;
auto box = Fortran::lower::genInitialDataTarget(
- converter, loc, boxTy, *expr, /*couldBeInEquivalence=*/true);
+ converter, loc, boxTy, *expr, couldBeInEquivalence);
fir::HasValueOp::create(b, loc, box);
};
builder.createGlobalConstant(loc, boxTy, mangleName, descFunc, linkOnce);
diff --git a/flang/test/Lower/equivalence-3.f b/flang/test/Lower/equivalence-3.f
new file mode 100644
index 0000000000000..19f8880189f0c
--- /dev/null
+++ b/flang/test/Lower/equivalence-3.f
@@ -0,0 +1,19 @@
+! RUN: bbc -emit-fir -o - %s | FileCheck %s
+
+ ! CHECK-LABEL: func @_QQmain
+ program main
+ real a1,a2
+ equivalence (a1,a2)
+ ! A fir.alloca should never appear in a global constant initialization.
+ ! CHECK: fir.global linkonce @_QFEx1.desc constant : !fir.box<!fir.ptr<!fir.array<5xf64>>>
+ ! CHECK: arith.constant 5 : index
+ ! CHECK:fir.address_of(@_QFEx1) : !fir.ref<!fir.array<5xf64>>
+ ! CHECK: fir.shape %c5 : (index) -> !fir.shape<1>
+ ! CHECK: fir.declare %0(%1) {uniq_name = "_QFEx1"} : (!fir.ref<!fir.array<5xf64>>, !fir.shape<1>) -> !fir.ref<!fir.array<5xf64>>
+ ! CHECK: fir.embox %2(%1) : (!fir.ref<!fir.array<5xf64>>, !fir.shape<1>) -> !fir.box<!fir.array<5xf64>>
+ ! CHECK: fir.rebox %3 : (!fir.box<!fir.array<5xf64>>) -> !fir.box<!fir.ptr<!fir.array<5xf64>>>
+ ! CHECK: fir.has_value %4 : !fir.box<!fir.ptr<!fir.array<5xf64>>>
+ real*8 x1(5)
+ namelist /y1/x1
+ read (5,y1)
+ end
More information about the flang-commits
mailing list