[Runtime] Add destructiveInjectEnumTag support for generic single payload enums with layout strings

This commit is contained in:
Dario Rexin
2023-06-29 10:37:51 -07:00
parent 83ccdbb5d3
commit 89d37da9ee
3 changed files with 86 additions and 13 deletions

View File

@@ -2333,7 +2333,7 @@ FUNCTION(SingletonEnumGetEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect))
// unsigned swift_enumSimple_getEnumTag(swift::OpaqueValue *address,
@@ -2343,7 +2343,7 @@ FUNCTION(EnumSimpleGetEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect))
// unsigned swift_enumFn_getEnumTag(swift::OpaqueValue *address,
@@ -2353,7 +2353,7 @@ FUNCTION(EnumFnGetEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect))
// unsigned swift_multiPayloadEnumGeneric_getEnumTag(opaque* address,
@@ -2363,7 +2363,7 @@ FUNCTION(MultiPayloadEnumGenericGetEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect))
// unsigned swift_singlePayloadEnumGeneric_getEnumTag(swift::OpaqueValue *address,
@@ -2373,7 +2373,18 @@ FUNCTION(SinglePayloadEnumGenericGetEnumTag,
C_CC, AlwaysAvailable,
RETURNS(Int32Ty),
ARGS(Int8PtrTy, TypeMetadataPtrTy),
ATTRS(NoUnwind),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect))
// void swift_singlePayloadEnumGeneric_destructiveInjectEnumTag(swift::OpaqueValue *address,
// unsigned tag,
// const Metadata *metadata)
FUNCTION(SinglePayloadEnumGenericDestructiveInjectEnumTag,
swift_singlePayloadEnumGeneric_destructiveInjectEnumTag,
C_CC, AlwaysAvailable,
RETURNS(VoidTy),
ARGS(Int8PtrTy, Int32Ty, TypeMetadataPtrTy),
ATTRS(NoUnwind, WillReturn),
EFFECT(NoEffect))
// void swift_generic_instantiateLayoutString(const uint8_t* layoutStr,