This is an archive of the discontinued LLVM Phabricator instance.

[flang] Do not return true for pointer sub-object in IsPointerObject
ClosedPublic

Authored by jeanPerier on Mar 10 2022, 7:25 AM.

Details

Summary

evaluate::IsPointerObject used to return true for pointer suboject like
pointer(10) while these object are not pointers. This prevented some
checks like 15.5.2.7 to be correctly enforced (e.g., it was possible to
pass pointer(10) to a non intent(in) dummy pointer).

After updating IsPointerObject behavior and adding a test for 15.5.2.7 in
call07.f90, a test in call03.f90 for 15.5.2.4(14) was failing.
It appeared the related semantics check was relying on IsPointerObject
to return true for pointer(10). Adapt the code to detect pointer element
in another way.
While looking at the code, I also noticed that semantics was
rejecting character(1) pointer/assumed shape suboject when these are
allowed (the standard has a special case for character(1) in
15.5.2.4(14), and I verified that other compilers that enforce 15.5.2.4(14)
do accept this).

Diff Detail

Event Timeline

jeanPerier created this revision.Mar 10 2022, 7:25 AM
Herald added a project: Restricted Project. · View Herald TranscriptMar 10 2022, 7:25 AM
Herald added a subscriber: jdoerfert. · View Herald Transcript
jeanPerier requested review of this revision.Mar 10 2022, 7:25 AM
klausler accepted this revision.Mar 10 2022, 9:01 AM
This revision is now accepted and ready to land.Mar 10 2022, 9:01 AM