diff options
Diffstat (limited to 'flang/lib/Semantics/resolve-names.cpp')
| -rw-r--r-- | flang/lib/Semantics/resolve-names.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp index 472093278047..077bee930675 100644 --- a/flang/lib/Semantics/resolve-names.cpp +++ b/flang/lib/Semantics/resolve-names.cpp @@ -646,12 +646,18 @@ public: } if (symbol->CanReplaceDetails(details)) { // update the existing symbol - CheckDuplicatedAttrs(name, *symbol, attrs); - SetExplicitAttrs(*symbol, attrs); if constexpr (std::is_same_v<SubprogramDetails, D>) { // Dummy argument defined by explicit interface? details.set_isDummy(IsDummy(*symbol)); + if (symbol->has<ProcEntityDetails>()) { + // Bare "EXTERNAL" dummy replaced with explicit INTERFACE + context().Warn(common::LanguageFeature::RedundantAttribute, name, + "Dummy argument '%s' was declared earlier as EXTERNAL"_warn_en_US, + name); + } } + CheckDuplicatedAttrs(name, *symbol, attrs); + SetExplicitAttrs(*symbol, attrs); symbol->set_details(std::move(details)); return *symbol; } else if constexpr (std::is_same_v<UnknownDetails, D>) { |
