[flang-commits] [flang] Fix #222168: reject DATA-style initializer on EXTERNAL/INTRINSIC (PR #222256)

via flang-commits flang-commits at lists.llvm.org
Wed Sep 9 00:21:31 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-semantics

Author: Adarsh Mishra (Adarsh-Me)

<details>
<summary>Changes</summary>

Fixes #<!-- -->222168

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


2 Files Affected:

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


``````````diff
diff --git a/flang/lib/Semantics/check-data.cpp b/flang/lib/Semantics/check-data.cpp
index 921128ced5d61..7fad6e9b40cf3 100644
--- a/flang/lib/Semantics/check-data.cpp
+++ b/flang/lib/Semantics/check-data.cpp
@@ -266,7 +266,13 @@ void DataChecker::Leave(const parser::EntityDecl &decl) {
         std::get_if<std::list<common::Indirection<parser::DataStmtValue>>>(
             &init->u)};
     if (name && list && !exprAnalyzer_.context().HasError(*name)) {
-      AccumulateDataInitializations(inits_, exprAnalyzer_, *name, *list);
+      if (IsProcedure(*name) && !IsProcedurePointer(*name)) {
+        exprAnalyzer_.context().Say(std::get<parser::Name>(decl.t).source,
+            "Procedure '%s' may not have a DATA-style initializer"_err_en_US,
+            name->name());
+      } else {
+        AccumulateDataInitializations(inits_, exprAnalyzer_, *name, *list);
+      }
     }
   }
 }
diff --git a/flang/test/Semantics/data28.f90 b/flang/test/Semantics/data28.f90
new file mode 100644
index 0000000000000..9167da4ba9357
--- /dev/null
+++ b/flang/test/Semantics/data28.f90
@@ -0,0 +1,13 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+! A procedure (EXTERNAL/INTRINSIC) may not have a DATA-style initializer.
+! The initializer used to be silently accepted and dropped (#222168).
+subroutine s1
+  external foo
+  !ERROR: Procedure 'foo' may not have a DATA-style initializer
+  integer foo /1/
+end subroutine
+subroutine s2
+  intrinsic sin
+  !ERROR: Procedure 'sin' may not have a DATA-style initializer
+  integer sin /1/
+end subroutine

``````````

</details>


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


More information about the flang-commits mailing list