[flang-commits] [flang] a377b85 - [flang] Adjust needless warning (#164500)
via flang-commits
flang-commits at lists.llvm.org
Fri Oct 24 12:11:26 PDT 2025
Author: Peter Klausler
Date: 2025-10-24T14:11:22-05:00
New Revision: a377b8563428dd53cc33fdd4645d194db5f01397
URL: https://github.com/llvm/llvm-project/commit/a377b8563428dd53cc33fdd4645d194db5f01397
DIFF: https://github.com/llvm/llvm-project/commit/a377b8563428dd53cc33fdd4645d194db5f01397.diff
LOG: [flang] Adjust needless warning (#164500)
When an external procedure has an explicit interface in one scope, and
an implicit interface in another, and there's at least one call to it
from which dummy argument information can be inferred, don't emit a
warning about potential incompatibility if the only difference in their
characteristics is that one of their interfaces was implicit.
Added:
flang/test/Semantics/bug1491.f90
Modified:
flang/lib/Semantics/check-declarations.cpp
flang/test/Semantics/null-init.f90
Removed:
################################################################################
diff --git a/flang/lib/Semantics/check-declarations.cpp b/flang/lib/Semantics/check-declarations.cpp
index 31e246cf0ab03..3e21bc6f218a7 100644
--- a/flang/lib/Semantics/check-declarations.cpp
+++ b/flang/lib/Semantics/check-declarations.cpp
@@ -1781,7 +1781,7 @@ void CheckHelper::CheckExternal(const Symbol &symbol) {
if (auto previousChars{Characterize(previous)}) {
std::string whyNot;
if (!chars->IsCompatibleWith(*previousChars,
- /*ignoreImplicitVsExplicit=*/false, &whyNot)) {
+ /*ignoreImplicitVsExplicit=*/true, &whyNot)) {
if (auto *msg{Warn(common::UsageWarning::ExternalInterfaceMismatch,
"The external interface '%s' is not compatible with an earlier definition (%s)"_warn_en_US,
symbol.name(), whyNot)}) {
diff --git a/flang/test/Semantics/bug1491.f90 b/flang/test/Semantics/bug1491.f90
new file mode 100644
index 0000000000000..ccc6eea31a1d4
--- /dev/null
+++ b/flang/test/Semantics/bug1491.f90
@@ -0,0 +1,21 @@
+!RUN: %python %S/test_errors.py %s %flang_fc1 -Werror -pedantic
+module m
+ interface
+ integer function foo1()
+ end function
+ integer function foo2(j)
+ end function
+ integer function foo3()
+ end function
+ end interface
+end module
+
+subroutine test()
+ integer, external :: foo1
+!WARNING: The external interface 'foo2' is not compatible with an earlier definition (distinct numbers of dummy arguments) [-Wexternal-interface-mismatch]
+ integer, external :: foo2
+ integer, external :: foo3
+ call bar(foo1())
+ call bar(foo2())
+ call baz(foo3)
+end subroutine
diff --git a/flang/test/Semantics/null-init.f90 b/flang/test/Semantics/null-init.f90
index d01ad75a75a11..a88cefe136a5e 100644
--- a/flang/test/Semantics/null-init.f90
+++ b/flang/test/Semantics/null-init.f90
@@ -37,7 +37,7 @@ module m6
module m7
interface
- !WARNING: The external interface 'null' is not compatible with an earlier definition (incompatible procedure attributes: ImplicitInterface) [-Wexternal-interface-mismatch]
+ !WARNING: The external interface 'null' is not compatible with an earlier definition (function results have incompatible attributes) [-Wexternal-interface-mismatch]
function null() result(p)
integer, pointer :: p
end function
More information about the flang-commits
mailing list