[all-commits] [llvm/llvm-project] 92bdc6: [flang] allow allocation of scalar TYPE(*) descrip...
jeanPerier via All-commits
all-commits at lists.llvm.org
Fri Mar 31 00:14:13 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 92bdc6ad01936cdb7fab389ad94d6f0ae4832021
https://github.com/llvm/llvm-project/commit/92bdc6ad01936cdb7fab389ad94d6f0ae4832021
Author: Jean Perier <jperier at nvidia.com>
Date: 2023-03-31 (Fri, 31 Mar 2023)
Changed paths:
M flang/include/flang/Optimizer/Dialect/FIRType.h
M flang/lib/Optimizer/Dialect/FIRType.cpp
M flang/test/Fir/alloc.fir
M flang/test/Fir/convert-to-llvm.fir
M flang/test/Fir/rebox.fir
Log Message:
-----------
[flang] allow allocation of scalar TYPE(*) descriptors
Currently, it is OK to have alloca/store/and reboxed to
fir.box<!fir.array<?xnone>> and fir.class<none>, but not simple
fir.box<none>.
This restriction is a legacy from a time where it was thought TYPE(*)
descriptor size would not be statically known, but the way polymorphism
was implemented actually allows knowing its size: a scalar descriptor
with an addendum (in case it is a derived type).
Note that this assumes fir.box<none> are always scalars. There are currently
a few cast from ranked descriptor to !fir.box<None> around runtime calls.
These are simple casts before runtime call, so there are no load/stores
to the resulting fir.box<None> and it is OK.
When assumed rank are supported, some legacy usage of fir.box<none> as the "any"
descriptor in the runtime interface will be replaced to avoid any issues there.
This change will be required to fix an undefined behavior with NULL() that
requires allocation of a fir.box<None>.
Differential Revision: https://reviews.llvm.org/D147237
More information about the All-commits
mailing list