[flang-commits] [flang] [FLANG][Semantics] Add check for DATA statement in interface body. (PR #221397)
via flang-commits
flang-commits at lists.llvm.org
Fri Sep 4 23:04:58 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: laoshd
<details>
<summary>Changes</summary>
Will check and reject DATA statements in interface bodies before lowering. A regression test is also added.
This PR is to fix #<!-- -->219525.
---
Full diff: https://github.com/llvm/llvm-project/pull/221397.diff
2 Files Affected:
- (modified) flang/lib/Semantics/resolve-names.cpp (+13)
- (added) flang/test/Semantics/interface-body-data.f90 (+11)
``````````diff
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 6517232a1e21c..1b70985066ac7 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -1356,6 +1356,7 @@ class ConstructVisitor : public virtual DeclarationVisitor {
bool Pre(const parser::AcSpec &);
bool Pre(const parser::AcImpliedDo &);
bool Pre(const parser::DataImpliedDo &);
+ bool Pre(const parser::DataStmt &);
bool Pre(const parser::DataIDoObject &);
bool Pre(const parser::DataStmtObject &);
bool Pre(const parser::DataStmtValue &);
@@ -8922,6 +8923,18 @@ bool ConstructVisitor::Pre(const parser::DataStmtObject &x) {
return false;
}
+bool ConstructVisitor::Pre(const parser::DataStmt &) {
+ // C1506: an interface body may not contain a DATA statement.
+ if (const Symbol *symbol{currScope().symbol()}) {
+ if (const auto *subp{symbol->detailsIf<SubprogramDetails>()};
+ subp && subp->isInterface()) {
+ Say(currStmtSource().value(),
+ "A DATA statement may not appear in an interface body"_err_en_US);
+ }
+ }
+ return true;
+}
+
bool ConstructVisitor::Pre(const parser::DataStmtValue &x) {
const auto &data{std::get<parser::DataStmtConstant>(x.t)};
auto &mutableData{const_cast<parser::DataStmtConstant &>(data)};
diff --git a/flang/test/Semantics/interface-body-data.f90 b/flang/test/Semantics/interface-body-data.f90
new file mode 100644
index 0000000000000..bdd522ed0eee8
--- /dev/null
+++ b/flang/test/Semantics/interface-body-data.f90
@@ -0,0 +1,11 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+
+interface
+ subroutine s
+ integer :: x
+ !ERROR: A DATA statement may not appear in an interface body
+ data x /1/
+ end subroutine
+end interface
+
+end
\ No newline at end of file
``````````
</details>
https://github.com/llvm/llvm-project/pull/221397
More information about the flang-commits
mailing list