summaryrefslogtreecommitdiff
path: root/flang-rt/lib/runtime/descriptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'flang-rt/lib/runtime/descriptor.cpp')
-rw-r--r--flang-rt/lib/runtime/descriptor.cpp18
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(