[flang] Carry over the derived type from target in pointer remapping
authorValentin Clement <clementval@gmail.com>
Mon, 20 Feb 2023 08:43:57 +0000 (09:43 +0100)
committerValentin Clement <clementval@gmail.com>
Mon, 20 Feb 2023 08:44:39 +0000 (09:44 +0100)
When calling PointerAssociateRemapping the dynamic type information
from the target needs to be carried over to the pointer if any.

Reviewed By: klausler

Differential Revision: https://reviews.llvm.org/D143717

flang/runtime/pointer.cpp

index bae9e03..4cf8e92 100644 (file)
@@ -121,6 +121,13 @@ void RTNAME(PointerAssociateRemapping)(Descriptor &pointer,
                      "pointer (%zd > %zd)",
         pointer.Elements(), target.Elements());
   }
+  if (auto *pointerAddendum{pointer.Addendum()}) {
+    if (const auto *targetAddendum{target.Addendum()}) {
+      if (const auto *derived{targetAddendum->derivedType()}) {
+        pointerAddendum->set_derivedType(derived);
+      }
+    }
+  }
 }
 
 int RTNAME(PointerAllocate)(Descriptor &pointer, bool hasStat,