[flang-commits] [flang] fbdb9d3 - [flang] Symbol for ENTRY with RESULT has Subroutine flag set (#177671)
via flang-commits
flang-commits at lists.llvm.org
Tue Jan 27 08:22:48 PST 2026
Author: Peter Klausler
Date: 2026-01-27T08:22:44-08:00
New Revision: fbdb9d32cc2e752ea2d1ea8b2c3606839798d9f4
URL: https://github.com/llvm/llvm-project/commit/fbdb9d32cc2e752ea2d1ea8b2c3606839798d9f4
DIFF: https://github.com/llvm/llvm-project/commit/fbdb9d32cc2e752ea2d1ea8b2c3606839798d9f4.diff
LOG: [flang] Symbol for ENTRY with RESULT has Subroutine flag set (#177671)
When creating a HostAssocDetails symbol for an ENTRY statement with an
explicit RESULT, name resolution unconditionally sets the Subroutine
flag on the symbol. Don't do that.
Fixes https://github.com/llvm/llvm-project/issues/177502.
Added:
flang/test/Semantics/bug177502.f90
Modified:
flang/lib/Semantics/resolve-names.cpp
Removed:
################################################################################
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 787744ff1b676..f207ab91ab682 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -5129,7 +5129,7 @@ void SubprogramVisitor::CreateEntry(
if (subpFlag == Symbol::Flag::Subroutine || distinctResultName) {
Symbol &assoc{MakeSymbol(entryName.source)};
assoc.set_details(HostAssocDetails{*entrySymbol});
- assoc.set(Symbol::Flag::Subroutine);
+ assoc.set(subpFlag);
}
Resolve(entryName, *entrySymbol);
std::set<SourceName> dummies;
diff --git a/flang/test/Semantics/bug177502.f90 b/flang/test/Semantics/bug177502.f90
new file mode 100644
index 0000000000000..45fe9616831e3
--- /dev/null
+++ b/flang/test/Semantics/bug177502.f90
@@ -0,0 +1,28 @@
+!RUN: %python %S/test_symbols.py %s %flang_fc1
+!DEF: /m Module
+module m
+ !DEF: /m/k PUBLIC ObjectEntity INTEGER(4)
+ integer k
+contains
+ !DEF: /m/f PUBLIC, RECURSIVE (Function) Subprogram REAL(4)
+ !DEF: /m/f/r ObjectEntity REAL(4)
+ recursive function f() result(r)
+ !REF: /m/f/r
+ real r
+ !DEF: /m/e PUBLIC (Function) Subprogram REAL(4)
+ !REF: /m/f/r
+ entry e() result(r)
+ !DEF: /m/f/e (Function) HostAssoc REAL(4)
+ !DEF: /m/f/ptr EXTERNAL, POINTER (Function) ProcEntity REAL(4)
+ procedure(e), pointer :: ptr => e
+ !REF: /m/k
+ k = k+1
+ !REF: /m/f/r
+ r = 20.0
+ !REF: /m/k
+ if (k==1) then
+ !REF: /m/f/ptr
+ if (ptr()/=20) error stop
+ end if
+ end function f
+end module
More information about the flang-commits
mailing list