[flang-commits] [flang] [flang] Revert two new interoperability semantic checks (PR #93112)
via flang-commits
flang-commits at lists.llvm.org
Wed May 22 16:50:03 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Peter Klausler (klausler)
<details>
<summary>Changes</summary>
Two checks related to BIND(C) vs non-BIND(C) entry points with the same dummy argument added by https://github.com/llvm/llvm-project/pull/92474 have turned out to be unnecessary. Revert them and adjust the tests.
---
Full diff: https://github.com/llvm/llvm-project/pull/93112.diff
2 Files Affected:
- (modified) flang/lib/Semantics/check-declarations.cpp (-36)
- (modified) flang/test/Semantics/bind-c12.f90 (+2-2)
``````````diff
diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp
index f564a0b69671c..1fd5934d8f7e3 100644
--- a/flang/lib/Semantics/check-declarations.cpp
+++ b/flang/lib/Semantics/check-declarations.cpp
@@ -2960,32 +2960,6 @@ parser::Messages CheckHelper::WhyNotInteroperableDerivedType(
return msgs;
}
-static UnorderedSymbolSet CollectEntryPointsWithDummy(const Symbol &dummy) {
- UnorderedSymbolSet entries;
- const Scope &subpScope{dummy.owner()};
- for (const auto &[_, ref] : subpScope.parent()) {
- const Symbol &x{*ref};
- if (const auto *subp{x.detailsIf<SubprogramDetails>()}) {
- if (x.scope() == &subpScope || subp->entryScope() == &dummy.owner()) {
- if (std::find(subp->dummyArgs().begin(), subp->dummyArgs().end(),
- &dummy) != subp->dummyArgs().end()) {
- entries.insert(x);
- }
- }
- }
- }
- return entries;
-}
-
-static bool AnyNonBindCEntry(const Symbol &dummy) {
- for (const Symbol &subp : CollectEntryPointsWithDummy(dummy)) {
- if (!subp.attrs().test(Attr::BIND_C)) {
- return true;
- }
- }
- return false;
-}
-
parser::Messages CheckHelper::WhyNotInteroperableObject(
const Symbol &symbol, bool isError) {
parser::Messages msgs;
@@ -3049,10 +3023,6 @@ parser::Messages CheckHelper::WhyNotInteroperableObject(
}
if (type->IsAssumedType()) { // ok
} else if (IsAssumedLengthCharacter(symbol)) {
- if (AnyNonBindCEntry(symbol)) {
- msgs.Say(symbol.name(),
- "An assumed-length dummy argument must not appear in a non-BIND(C) entry in a subprogram with an entry that must be interoperable"_err_en_US);
- }
} else if (IsAllocatableOrPointer(symbol) &&
type->category() == DeclTypeSpec::Character &&
type->characterTypeSpec().length().isDeferred()) {
@@ -3083,12 +3053,6 @@ parser::Messages CheckHelper::WhyNotInteroperableObject(
msgs.Say(symbol.name(),
"An interoperable procedure with an OPTIONAL dummy argument might not be portable"_port_en_US);
}
- if (symbol.attrs().test(Attr::VALUE)) {
- if (AnyNonBindCEntry(symbol)) {
- msgs.Say(symbol.name(),
- "A VALUE dummy argument must not appear in a non-BIND(C) entry of a subprogram with an entry that must be interoperable"_err_en_US);
- }
- }
if (IsDescriptor(symbol) && IsPointer(symbol) &&
symbol.attrs().test(Attr::CONTIGUOUS)) {
msgs.Say(symbol.name(),
diff --git a/flang/test/Semantics/bind-c12.f90 b/flang/test/Semantics/bind-c12.f90
index 55af8a93b5b5b..01a8d0cdbc3d3 100644
--- a/flang/test/Semantics/bind-c12.f90
+++ b/flang/test/Semantics/bind-c12.f90
@@ -26,8 +26,8 @@ subroutine p(n)
subroutine subr5(p) bind(c)
interface
+ !WARNING: A dummy procedure of an interoperable procedure should be BIND(C)
subroutine p(c)
- !ERROR: An assumed-length dummy argument must not appear in a non-BIND(C) entry in a subprogram with an entry that must be interoperable
character(*), intent(in) :: c
end
end interface
@@ -52,8 +52,8 @@ character(*) function p()
subroutine subr8(p) bind(c)
interface
+ !WARNING: A dummy procedure of an interoperable procedure should be BIND(C)
subroutine p(n)
- !ERROR: A VALUE dummy argument must not appear in a non-BIND(C) entry of a subprogram with an entry that must be interoperable
integer, intent(in), value :: n
end
end interface
``````````
</details>
https://github.com/llvm/llvm-project/pull/93112
More information about the flang-commits
mailing list