[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