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

Adarsh Mishra via flang-commits flang-commits at lists.llvm.org
Wed Sep 9 00:20:38 PDT 2026


https://github.com/Adarsh-Me created https://github.com/llvm/llvm-project/pull/222256

Fixes #222168

>From 04260baa94b987a676d794ae53c1747d10f17c09 Mon Sep 17 00:00:00 2001
From: Adarsh-Me <122873385+Adarsh-Me at users.noreply.github.com>
Date: Wed, 9 Sep 2026 06:42:11 +0000
Subject: [PATCH] Fix #222168: reject DATA-style initializer on
 EXTERNAL/INTRINSIC

---
 flang/lib/Semantics/check-data.cpp |  8 +++++++-
 flang/test/Semantics/data28.f90    | 13 +++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 flang/test/Semantics/data28.f90

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



More information about the flang-commits mailing list