diff options
author | Jean Perier <jperier@nvidia.com> | 2022-03-11 09:22:47 +0100 |
---|---|---|
committer | Jean Perier <jperier@nvidia.com> | 2022-03-11 09:26:21 +0100 |
commit | a7802a806d5f8dea2038507f4746b661d4e9bf97 (patch) | |
tree | 5689240f50eb9b2b5fdce1ef9984f86bc19b5972 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
parent | 3ed643ea765411a3837b6fbb2e6f3b5a6bd616a3 (diff) | |
download | llvm-a7802a806d5f8dea2038507f4746b661d4e9bf97.zip llvm-a7802a806d5f8dea2038507f4746b661d4e9bf97.tar.gz llvm-a7802a806d5f8dea2038507f4746b661d4e9bf97.tar.bz2 |
[flang] Do not return true for pointer sub-object in IsPointerObject
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).
Differential Revision: https://reviews.llvm.org/D121377
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
0 files changed, 0 insertions, 0 deletions