diff options
Diffstat (limited to 'flang-rt/lib/runtime/descriptor.cpp')
| -rw-r--r-- | flang-rt/lib/runtime/descriptor.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/flang-rt/lib/runtime/descriptor.cpp b/flang-rt/lib/runtime/descriptor.cpp index 882870a57042..5ede5f9d9f9e 100644 --- a/flang-rt/lib/runtime/descriptor.cpp +++ b/flang-rt/lib/runtime/descriptor.cpp @@ -15,6 +15,7 @@ #include "flang-rt/runtime/terminator.h" #include "flang-rt/runtime/type-info.h" #include "flang/Common/type-kinds.h" +#include "flang/Runtime/freestanding-tools.h" #include <cassert> #include <cstdlib> #include <cstring> @@ -26,13 +27,13 @@ RT_OFFLOAD_API_GROUP_BEGIN RT_API_ATTRS Descriptor::Descriptor(const Descriptor &that) { *this = that; } RT_API_ATTRS Descriptor &Descriptor::operator=(const Descriptor &that) { - std::memcpy(reinterpret_cast<void *>(this), &that, that.SizeInBytes()); + runtime::memcpy(reinterpret_cast<void *>(this), &that, that.SizeInBytes()); return *this; } RT_API_ATTRS void Descriptor::Establish(TypeCode t, std::size_t elementBytes, void *p, int rank, const SubscriptValue *extent, - ISO::CFI_attribute_t attribute, bool addendum) { + ISO::CFI_attribute_t attribute, bool addendum, int allocatorIdx) { Terminator terminator{__FILE__, __LINE__}; int cfiStatus{ISO::VerifyEstablishParameters(&raw_, p, attribute, t.raw(), elementBytes, rank, extent, /*external=*/false)}; @@ -59,6 +60,7 @@ RT_API_ATTRS void Descriptor::Establish(TypeCode t, std::size_t elementBytes, if (a) { new (a) DescriptorAddendum{}; } + SetAllocIdx(allocatorIdx); } RT_API_ATTRS std::size_t Descriptor::BytesFor(TypeCategory category, int kind) { @@ -70,21 +72,22 @@ RT_API_ATTRS std::size_t Descriptor::BytesFor(TypeCategory category, int kind) { RT_API_ATTRS void Descriptor::Establish(TypeCategory c, int kind, void *p, int rank, const SubscriptValue *extent, ISO::CFI_attribute_t attribute, - bool addendum) { + bool addendum, int allocatorIdx) { Establish(TypeCode(c, kind), BytesFor(c, kind), p, rank, extent, attribute, - addendum); + addendum, allocatorIdx); } RT_API_ATTRS void Descriptor::Establish(int characterKind, std::size_t characters, void *p, int rank, const SubscriptValue *extent, - ISO::CFI_attribute_t attribute, bool addendum) { + ISO::CFI_attribute_t attribute, bool addendum, int allocatorIdx) { Establish(TypeCode{TypeCategory::Character, characterKind}, - characterKind * characters, p, rank, extent, attribute, addendum); + characterKind * characters, p, rank, extent, attribute, addendum, + allocatorIdx); } RT_API_ATTRS void Descriptor::Establish(const typeInfo::DerivedType &dt, void *p, int rank, const SubscriptValue *extent, - ISO::CFI_attribute_t attribute) { + ISO::CFI_attribute_t attribute, int allocatorIdx) { auto elementBytes{static_cast<std::size_t>(dt.sizeInBytes())}; ISO::EstablishDescriptor( &raw_, p, attribute, CFI_type_struct, elementBytes, rank, extent); @@ -98,6 +101,7 @@ RT_API_ATTRS void Descriptor::Establish(const typeInfo::DerivedType &dt, } SetHasAddendum(); new (Addendum()) DescriptorAddendum{&dt}; + SetAllocIdx(allocatorIdx); } RT_API_ATTRS void Descriptor::UncheckedScalarEstablish( |
