[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
Loading
Please sign in to comment