23#ifndef FORTRAN_RUNTIME_ASSIGN_H_
24#define FORTRAN_RUNTIME_ASSIGN_H_
26#include "flang/Runtime/entry-names.h"
27#include "flang/Runtime/freestanding-tools.h"
29namespace Fortran::runtime {
35 MaybeReallocate = 1 << 0,
36 NeedFinalization = 1 << 1,
37 CanBeDefinedAssignment = 1 << 2,
38 ComponentCanBeDefinedAssignment = 1 << 3,
39 ExplicitLengthCharacterLHS = 1 << 4,
40 PolymorphicLHS = 1 << 5,
41 DeallocateLHS = 1 << 6
44#ifdef RT_DEVICE_COMPILATION
45RT_API_ATTRS
void Assign(Descriptor &to,
const Descriptor &from,
46 Terminator &terminator,
int flags, MemmoveFct memmoveFct = &MemmoveWrapper);
48RT_API_ATTRS
void Assign(Descriptor &to,
const Descriptor &from,
49 Terminator &terminator,
int flags,
50 MemmoveFct memmoveFct = &Fortran::runtime::memmove);
56void RTDECL(Assign)(Descriptor &to,
const Descriptor &from,
57 const char *sourceFile =
nullptr,
int sourceLine = 0);
60void RTDECL(AssignTemporary)(Descriptor &to,
const Descriptor &from,
61 const char *sourceFile =
nullptr,
int sourceLine = 0);
66void RTDECL(CopyInAssign)(Descriptor &temp,
const Descriptor &var,
67 const char *sourceFile =
nullptr,
int sourceLine = 0);
70void RTDECL(CopyOutAssign)(Descriptor *var, Descriptor &temp,
71 const char *sourceFile =
nullptr,
int sourceLine = 0);
76void RTDECL(AssignExplicitLengthCharacter)(Descriptor &to,
77 const Descriptor &from,
const char *sourceFile =
nullptr,
80void RTDECL(AssignPolymorphic)(Descriptor &to,
const Descriptor &from,
81 const char *sourceFile =
nullptr,
int sourceLine = 0);