[flang-commits] [flang] [flang] Fix crash with legacy DATA initializer for an invalid declaration (PR #221170)

via flang-commits flang-commits at lists.llvm.org
Fri Sep 4 01:49:17 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-semantics

Author: Mattéo Rizza Murgier (matteo-rm)

<details>
<summary>Changes</summary>

For legacy DATA /initialization/, declarations weren't checked for errors before construction, resulting in an assert crash. This PR fixes this by adding a check.

Fixes #<!-- -->220846

---
Full diff: https://github.com/llvm/llvm-project/pull/221170.diff


2 Files Affected:

- (modified) flang/lib/Semantics/check-data.cpp (+1-1) 
- (added) flang/test/Semantics/data27.f90 (+7) 


``````````diff
diff --git a/flang/lib/Semantics/check-data.cpp b/flang/lib/Semantics/check-data.cpp
index e8b7ea2eda63e..921128ced5d61 100644
--- a/flang/lib/Semantics/check-data.cpp
+++ b/flang/lib/Semantics/check-data.cpp
@@ -265,7 +265,7 @@ void DataChecker::Leave(const parser::EntityDecl &decl) {
     const auto *list{
         std::get_if<std::list<common::Indirection<parser::DataStmtValue>>>(
             &init->u)};
-    if (name && list) {
+    if (name && list && !exprAnalyzer_.context().HasError(*name)) {
       AccumulateDataInitializations(inits_, exprAnalyzer_, *name, *list);
     }
   }
diff --git a/flang/test/Semantics/data27.f90 b/flang/test/Semantics/data27.f90
new file mode 100644
index 0000000000000..4dd6230c0b957
--- /dev/null
+++ b/flang/test/Semantics/data27.f90
@@ -0,0 +1,7 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+program main
+  type foo
+  end type foo
+  !ERROR: 'foo' is already declared in this scoping unit
+  integer foo(1) /2/
+end program main

``````````

</details>


https://github.com/llvm/llvm-project/pull/221170


More information about the flang-commits mailing list