Skip to content

Commit 8ddedbf

Browse files
authored
[flang] Assume unknown target of procedure pointer assignment is a pr… (#66232)
…ocedure When an previously unknown name appears as the target of an assignment to a known procedure pointer, create an external symbol for it rather than an implicitly-typed object symbol.
1 parent 5a3130e commit 8ddedbf

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

flang/lib/Semantics/resolve-names.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8108,6 +8108,15 @@ bool ResolveNamesVisitor::Pre(const parser::PointerAssignmentStmt &x) {
81088108
return false;
81098109
}
81108110
}
8111+
if (IsProcedurePointer(parser::GetLastName(dataRef).symbol) &&
8112+
!FindSymbol(*name)) {
8113+
// Unknown target of procedure pointer must be an external procedure
8114+
Symbol &symbol{MakeSymbol(
8115+
context().globalScope(), name->source, Attrs{Attr::EXTERNAL})};
8116+
Resolve(*name, symbol);
8117+
ConvertToProcEntity(symbol);
8118+
return false;
8119+
}
81118120
}
81128121
Walk(expr);
81138122
return false;

flang/test/Semantics/symbol31.f90

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
! RUN: %python %S/test_symbols.py %s %flang_fc1
2+
!DEF: /MainProgram1/pptr EXTERNAL, POINTER ProcEntity
3+
procedure(), pointer :: pptr
4+
!REF: /MainProgram1/pptr
5+
!DEF: /mustbeexternal EXTERNAL ProcEntity
6+
pptr => mustbeexternal
7+
end program

0 commit comments

Comments
 (0)