Skip to content

Commit 04630a3

Browse files
authored
Merge pull request #14240 from gottesmm/pr-2abaee5940120b3316efe10c560537953bf60d60
2 parents e223f1f + 1b37cc7 commit 04630a3

File tree

1 file changed

+17
-41
lines changed

1 file changed

+17
-41
lines changed

stdlib/public/runtime/Reflection.mm

Lines changed: 17 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,7 @@ intptr_t swift_TupleMirror_count(HeapObject *owner,
356356
const OpaqueValue *value,
357357
const Metadata *type) {
358358
auto Tuple = static_cast<const TupleTypeMetadata *>(type);
359-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
360-
swift_release(owner);
361-
#endif
359+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
362360
return Tuple->NumElements;
363361
}
364362

@@ -404,9 +402,9 @@ void swift_TupleMirror_subscript(String *outString,
404402
auto bytes = reinterpret_cast<const char*>(value);
405403
auto eltData = reinterpret_cast<const OpaqueValue *>(bytes + elt.Offset);
406404

407-
#ifdef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
408-
swift_retain(owner);
409-
#endif
405+
// Since 'owner' is consumed, when we have a +0 convention, we must retain
406+
// owner first.
407+
SWIFT_CC_PLUSZERO_GUARD(swift_retain(owner));
410408

411409
// 'owner' is consumed by this call.
412410
new (outMirror) Mirror(reflect(owner, eltData, elt.Type));
@@ -496,9 +494,7 @@ intptr_t swift_StructMirror_count(HeapObject *owner,
496494
const OpaqueValue *value,
497495
const Metadata *type) {
498496
auto Struct = static_cast<const StructMetadata *>(type);
499-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
500-
swift_release(owner);
501-
#endif
497+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
502498
return Struct->Description->Struct.NumFields;
503499
}
504500

@@ -524,6 +520,8 @@ void swift_StructMirror_subscript(String *outString,
524520
new (outString) String(getFieldName(Struct->Description->Struct.FieldNames, i));
525521

526522
// 'owner' is consumed by this call.
523+
SWIFT_CC_PLUSZERO_GUARD(swift_unknownRetain(owner));
524+
527525
assert(!fieldType.isIndirect() && "indirect struct fields not implemented");
528526

529527
if (loadSpecialReferenceStorage(owner, fieldData, fieldType, outMirror))
@@ -583,9 +581,7 @@ static void getEnumMirrorInfo(const OpaqueValue *value,
583581
const OpaqueValue *value,
584582
const Metadata *type) {
585583
if (!isEnumReflectable(type)) {
586-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
587-
swift_release(owner);
588-
#endif
584+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
589585
return nullptr;
590586
}
591587

@@ -595,9 +591,7 @@ static void getEnumMirrorInfo(const OpaqueValue *value,
595591
unsigned tag;
596592
getEnumMirrorInfo(value, type, &tag, nullptr, nullptr);
597593

598-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
599-
swift_release(owner);
600-
#endif
594+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
601595

602596
return getFieldName(Description.CaseNames, tag);
603597
}
@@ -612,24 +606,18 @@ static void getEnumMirrorInfo(const OpaqueValue *value,
612606
OpaqueValue *mirrorValue = const_cast<OpaqueValue*>(cMirrorValue);
613607
Mirror mirror;
614608

615-
bool take =
616-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
617-
mirrorValue == value;
618-
#else
619-
false;
620-
#endif
609+
bool take = false;
610+
SWIFT_CC_PLUSONE_GUARD(take = (mirrorValue == value));
621611

622612
::new (&mirror) MagicMirror(mirrorValue, mirrorType, take);
623613

624614
MagicMirror *theMirror = reinterpret_cast<MagicMirror *>(&mirror);
625615
MagicMirrorData data = theMirror->Data;
626616
const char *result = swift_EnumMirror_caseName(data.Owner, data.Value, data.Type);
627617

628-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
629618
// Destroy the whole original value if we couldn't take it.
630619
if (!take)
631620
type->vw_destroy(value);
632-
#endif
633621

634622
return result;
635623
}
@@ -639,17 +627,13 @@ intptr_t swift_EnumMirror_count(HeapObject *owner,
639627
const OpaqueValue *value,
640628
const Metadata *type) {
641629
if (!isEnumReflectable(type)) {
642-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
643-
swift_release(owner);
644-
#endif
630+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
645631
return 0;
646632
}
647633

648634
const Metadata *payloadType;
649635
getEnumMirrorInfo(value, type, nullptr, &payloadType, nullptr);
650-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
651-
swift_release(owner);
652-
#endif
636+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
653637
return (payloadType != nullptr) ? 1 : 0;
654638
}
655639

@@ -678,9 +662,7 @@ void swift_EnumMirror_subscript(String *outString,
678662
type->vw_destructiveInjectEnumTag(const_cast<OpaqueValue *>(value),
679663
(int) (tag - Description.getNumPayloadCases()));
680664

681-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
682-
swift_release(owner);
683-
#endif
665+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
684666

685667
owner = pair.first;
686668
value = pair.second;
@@ -708,9 +690,7 @@ intptr_t swift_ClassMirror_count(HeapObject *owner,
708690
const OpaqueValue *value,
709691
const Metadata *type) {
710692
auto Clas = static_cast<const ClassMetadata*>(type);
711-
#ifndef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
712-
swift_release(owner);
713-
#endif
693+
SWIFT_CC_PLUSONE_GUARD(swift_release(owner));
714694
auto count = Clas->getDescription()->Class.NumFields;
715695

716696
// If the class has a superclass, the superclass instance is treated as the
@@ -953,9 +933,7 @@ static Mirror getMirrorForSuperclass(const ClassMetadata *sup,
953933
Mirror resultBuf;
954934
MagicMirror *result = ::new (&resultBuf) MagicMirror;
955935

956-
#ifdef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
957-
swift_retain(owner);
958-
#endif
936+
SWIFT_CC_PLUSZERO_GUARD(swift_retain(owner));
959937

960938
result->Self = ClassSuperMirrorMetadata();
961939
result->MirrorWitness = &ClassSuperMirrorWitnessTable;
@@ -976,9 +954,7 @@ static Mirror ObjC_getMirrorForSuperclass(Class sup,
976954
Mirror resultBuf;
977955
MagicMirror *result = ::new (&resultBuf) MagicMirror;
978956

979-
#ifdef SWIFT_RUNTIME_ENABLE_GUARANTEED_NORMAL_ARGUMENTS
980-
swift_retain(owner);
981-
#endif
957+
SWIFT_CC_PLUSZERO_GUARD(swift_retain(owner));
982958

983959
result->Self = ObjCSuperMirrorMetadata();
984960
result->MirrorWitness = &ObjCSuperMirrorWitnessTable;

0 commit comments

Comments
 (0)