[all-commits] [llvm/llvm-project] cb3f1e: [flang] Fix context less NULL() lowering
jeanPerier via All-commits
all-commits at lists.llvm.org
Fri Mar 31 00:15:29 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: cb3f1e2d12c61c650f9871198499f248a19f59d2
https://github.com/llvm/llvm-project/commit/cb3f1e2d12c61c650f9871198499f248a19f59d2
Author: Jean Perier <jperier at nvidia.com>
Date: 2023-03-31 (Fri, 31 Mar 2023)
Changed paths:
M flang/lib/Lower/ConvertExpr.cpp
M flang/test/Lower/dummy-argument-optional.f90
M flang/test/Lower/polymorphic.f90
Log Message:
-----------
[flang] Fix context less NULL() lowering
The current context less lowering of NULL is producing invalid code
(can lead to reading outside of allocated memory): it is casting
a simple pointer to a descriptor address.
Later, reads are made to this descriptor. It used to be "OK" when
fir.load of fir.box were no-ops, but this was incorrect, and the
fir.load codegen is known doing a copy, and read the whole descriptor
data, not only the base address.
The previous patch that allowed fir.box<None> allocation, this
code fix this by allocating an actual fir.box<None>.
Note: this is still an overkill way to lower foo(null()). HLFIR
lowering always contextualize NULL() lowering leading to much simpler
code:
```
%absent = fir.absent fir.box<T>
fir.call @foo(%absent)
```
Differential Revision: https://reviews.llvm.org/D147239
More information about the All-commits
mailing list