Skip to content

Commit

Permalink
[flang] Assume unknown target of procedure pointer assignment is a pr… (
Browse files Browse the repository at this point in the history
#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.
  • Loading branch information
klausler committed Sep 13, 2023
1 parent 5a3130e commit 8ddedbf
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
9 changes: 9 additions & 0 deletions flang/lib/Semantics/resolve-names.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8108,6 +8108,15 @@ bool ResolveNamesVisitor::Pre(const parser::PointerAssignmentStmt &x) {
return false;
}
}
if (IsProcedurePointer(parser::GetLastName(dataRef).symbol) &&
!FindSymbol(*name)) {
// Unknown target of procedure pointer must be an external procedure
Symbol &symbol{MakeSymbol(
context().globalScope(), name->source, Attrs{Attr::EXTERNAL})};
Resolve(*name, symbol);
ConvertToProcEntity(symbol);
return false;
}
}
Walk(expr);
return false;
Expand Down
7 changes: 7 additions & 0 deletions flang/test/Semantics/symbol31.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
! RUN: %python %S/test_symbols.py %s %flang_fc1
!DEF: /MainProgram1/pptr EXTERNAL, POINTER ProcEntity
procedure(), pointer :: pptr
!REF: /MainProgram1/pptr
!DEF: /mustbeexternal EXTERNAL ProcEntity
pptr => mustbeexternal
end program

0 comments on commit 8ddedbf

Please sign in to comment.