Skip to content

Commit 36ccfe2

Browse files
authored
[flang] Clear obsolete type from reallocated allocatable (#139788)
When an assignment to a polymorphic allocatable changes its type to an intrinsic type, be sure to reset its descriptor's derived type pointer to null. Fixes #136522.
1 parent 9457616 commit 36ccfe2

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

flang-rt/lib/runtime/assign.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,18 @@ static RT_API_ATTRS int AllocateAssignmentLHS(
7979
to.raw().elem_len = from.ElementBytes();
8080
}
8181
const typeInfo::DerivedType *derived{nullptr};
82+
DescriptorAddendum *toAddendum{to.Addendum()};
8283
if (const DescriptorAddendum * fromAddendum{from.Addendum()}) {
8384
derived = fromAddendum->derivedType();
84-
if (DescriptorAddendum * toAddendum{to.Addendum()}) {
85+
if (toAddendum) {
8586
toAddendum->set_derivedType(derived);
8687
std::size_t lenParms{derived ? derived->LenParameters() : 0};
8788
for (std::size_t j{0}; j < lenParms; ++j) {
8889
toAddendum->SetLenParameterValue(j, fromAddendum->LenParameterValue(j));
8990
}
9091
}
92+
} else if (toAddendum) {
93+
toAddendum->set_derivedType(nullptr);
9194
}
9295
// subtle: leave bounds in place when "from" is scalar (10.2.1.3(3))
9396
int rank{from.rank()};

0 commit comments

Comments
 (0)