Skip to content

Commit

Permalink
[flang] Fix bogus error message about invalid polymorphic entity (#83733
Browse files Browse the repository at this point in the history
)

The check for declarations of polymorphic entities was emitting a bogus
error for one (or more) layers of pointers to procedures returning
pointers to polymorphic types.

Fixes #83292.
  • Loading branch information
klausler committed Mar 5, 2024
1 parent 1b812f9 commit 3cef82d
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
2 changes: 2 additions & 0 deletions flang/lib/Semantics/check-declarations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3236,6 +3236,8 @@ void CheckHelper::CheckSymbolType(const Symbol &symbol) {
const Symbol *result{FindFunctionResult(symbol)};
const Symbol &relevant{result ? *result : symbol};
if (IsAllocatable(relevant)) { // always ok
} else if (IsProcedurePointer(symbol) && result && IsPointer(*result)) {
// procedure pointer returning allocatable or pointer: ok
} else if (IsPointer(relevant) && !IsProcedure(relevant)) {
// object pointers are always ok
} else if (auto dyType{evaluate::DynamicType::From(relevant)}) {
Expand Down
9 changes: 9 additions & 0 deletions flang/test/Semantics/declarations06.f90
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ module m
procedure(cf1), pointer :: pp1
procedure(cf2), pointer :: pp2
procedure(cf3), pointer :: pp3
procedure(cf5), pointer :: pp4 ! ok
contains
!ERROR: CLASS entity 'cf1' must be a dummy argument, allocatable, or object pointer
class(t) function cf1()
Expand All @@ -33,4 +34,12 @@ subroutine test(d1,d2,d3)
!ERROR: CLASS entity 'd3' must be a dummy argument, allocatable, or object pointer
class(t), external, pointer :: d3
end
function cf4()
class(t), pointer :: cf4
cf4 => v3
end
function cf5
procedure(cf4), pointer :: cf5
cf5 => cf4
end
end

0 comments on commit 3cef82d

Please sign in to comment.