From d2bcb0a129f1e60d291fe967426e3686d9ea0587 Mon Sep 17 00:00:00 2001 From: Mike Kashkarov Date: Tue, 1 Mar 2022 02:16:47 +0300 Subject: [PATCH] [flang] Allow IMPLICIT NONE(EXTERNAL) with GenericDetails Restrictions of IMPLICIT NONE(EXTERNAL) prohibits usage of c_associated from iso_c_binding (with explicit interface) without external definiton - relax associated check. Reviewed By: klausler Differential Revision: https://reviews.llvm.org/D120971 --- flang/lib/Semantics/resolve-names.cpp | 4 +++- flang/test/Semantics/implicit12.f90 | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 flang/test/Semantics/implicit12.f90 diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index cf7bebcfd656..5b63f842d63f 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -6495,7 +6495,9 @@ void ResolveNamesVisitor::HandleProcedureName( if (!SetProcFlag(name, *symbol, flag)) { return; // reported error } - CheckImplicitNoneExternal(name.source, *symbol); + if (!symbol->has()) { + CheckImplicitNoneExternal(name.source, *symbol); + } if (symbol->has() && symbol->attrs().test(Attr::ABSTRACT)) { Say(name, "Abstract interface '%s' may not be called"_err_en_US); diff --git a/flang/test/Semantics/implicit12.f90 b/flang/test/Semantics/implicit12.f90 new file mode 100644 index 000000000000..bff2cb1545b1 --- /dev/null +++ b/flang/test/Semantics/implicit12.f90 @@ -0,0 +1,8 @@ +! RUN: %python %S/test_errors.py %s %flang_fc1 +use iso_c_binding, only: c_ptr, c_associated +implicit none(external) +type (c_ptr) :: cptr +if (.not. c_associated (cptr)) then + return +end if +end