Skip to content

Commit d008e37

Browse files
Merge pull request #11950 from aschwaighofer/runtime_return_dest_2
runtime: Also return the destination argument of the unknownWeak- and…
2 parents c1b9ff7 + 8b2fa67 commit d008e37

File tree

8 files changed

+201
-128
lines changed

8 files changed

+201
-128
lines changed

include/swift/Runtime/HeapObject.h

Lines changed: 68 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -889,13 +889,15 @@ static inline void swift_nonatomic_unknownRelease_n(void *value, int n)
889889
///
890890
/// \param ref - never null
891891
/// \param value - not necessarily a native Swift object; can be null
892+
/// \return ref
892893
SWIFT_RUNTIME_EXPORT
893-
void swift_unknownWeakInit(WeakReference *ref, void *value);
894+
WeakReference *swift_unknownWeakInit(WeakReference *ref, void *value);
894895

895896
#else
896897

897-
static inline void swift_unknownWeakInit(WeakReference *ref, void *value) {
898-
swift_weakInit(ref, static_cast<HeapObject *>(value));
898+
static inline WeakReference *swift_unknownWeakInit(WeakReference *ref,
899+
void *value) {
900+
return swift_weakInit(ref, static_cast<HeapObject *>(value));
899901
}
900902

901903
#endif /* SWIFT_OBJC_INTEROP */
@@ -906,13 +908,15 @@ static inline void swift_unknownWeakInit(WeakReference *ref, void *value) {
906908
///
907909
/// \param ref - never null
908910
/// \param value - not necessarily a native Swift object; can be null
911+
/// \return ref
909912
SWIFT_RUNTIME_EXPORT
910-
void swift_unknownWeakAssign(WeakReference *ref, void *value);
913+
WeakReference *swift_unknownWeakAssign(WeakReference *ref, void *value);
911914

912915
#else
913916

914-
static inline void swift_unknownWeakAssign(WeakReference *ref, void *value) {
915-
swift_weakAssign(ref, static_cast<HeapObject *>(value));
917+
static inline WeakReference *swift_unknownWeakAssign(WeakReference *ref,
918+
void *value) {
919+
return swift_weakAssign(ref, static_cast<HeapObject *>(value));
916920
}
917921

918922
#endif /* SWIFT_OBJC_INTEROP */
@@ -973,15 +977,16 @@ static inline void swift_unknownWeakDestroy(WeakReference *object) {
973977

974978
/// Copy-initialize a weak reference variable from one that might not
975979
/// refer to a native Swift object.
980+
/// \return dest
976981
SWIFT_RUNTIME_EXPORT
977-
void swift_unknownWeakCopyInit(WeakReference *dest,
978-
WeakReference *src);
982+
WeakReference *swift_unknownWeakCopyInit(WeakReference *dest,
983+
WeakReference *src);
979984

980985
#else
981986

982-
static inline void swift_unknownWeakCopyInit(WeakReference *dest,
983-
WeakReference *src) {
984-
swift_weakCopyInit(dest, src);
987+
static inline WeakReference *swift_unknownWeakCopyInit(WeakReference *dest,
988+
WeakReference *src) {
989+
return swift_weakCopyInit(dest, src);
985990
}
986991

987992
#endif /* SWIFT_OBJC_INTEROP */
@@ -990,15 +995,16 @@ static inline void swift_unknownWeakCopyInit(WeakReference *dest,
990995

991996
/// Take-initialize a weak reference variable from one that might not
992997
/// refer to a native Swift object.
998+
/// \return dest
993999
SWIFT_RUNTIME_EXPORT
994-
void swift_unknownWeakTakeInit(WeakReference *dest,
995-
WeakReference *src);
1000+
WeakReference *swift_unknownWeakTakeInit(WeakReference *dest,
1001+
WeakReference *src);
9961002

9971003
#else
9981004

999-
static inline void swift_unknownWeakTakeInit(WeakReference *dest,
1000-
WeakReference *src) {
1001-
swift_weakTakeInit(dest, src);
1005+
static inline WeakReference *swift_unknownWeakTakeInit(WeakReference *dest,
1006+
WeakReference *src) {
1007+
return swift_weakTakeInit(dest, src);
10021008
}
10031009

10041010
#endif /* SWIFT_OBJC_INTEROP */
@@ -1007,15 +1013,16 @@ static inline void swift_unknownWeakTakeInit(WeakReference *dest,
10071013

10081014
/// Copy-assign a weak reference variable from another when either
10091015
/// or both variables might not refer to a native Swift object.
1016+
/// \return dest
10101017
SWIFT_RUNTIME_EXPORT
1011-
void swift_unknownWeakCopyAssign(WeakReference *dest,
1012-
WeakReference *src);
1018+
WeakReference *swift_unknownWeakCopyAssign(WeakReference *dest,
1019+
WeakReference *src);
10131020

10141021
#else
10151022

1016-
static inline void swift_unknownWeakCopyAssign(WeakReference *dest,
1017-
WeakReference *src) {
1018-
swift_weakCopyAssign(dest, src);
1023+
static inline WeakReference *swift_unknownWeakCopyAssign(WeakReference *dest,
1024+
WeakReference *src) {
1025+
return swift_weakCopyAssign(dest, src);
10191026
}
10201027

10211028
#endif /* SWIFT_OBJC_INTEROP */
@@ -1024,15 +1031,16 @@ static inline void swift_unknownWeakCopyAssign(WeakReference *dest,
10241031

10251032
/// Take-assign a weak reference variable from another when either
10261033
/// or both variables might not refer to a native Swift object.
1034+
/// \return dest
10271035
SWIFT_RUNTIME_EXPORT
1028-
void swift_unknownWeakTakeAssign(WeakReference *dest,
1029-
WeakReference *src);
1036+
WeakReference *swift_unknownWeakTakeAssign(WeakReference *dest,
1037+
WeakReference *src);
10301038

10311039
#else
10321040

1033-
static inline void swift_unknownWeakTakeAssign(WeakReference *dest,
1034-
WeakReference *src) {
1035-
swift_weakTakeAssign(dest, src);
1041+
static inline WeakReference *swift_unknownWeakTakeAssign(WeakReference *dest,
1042+
WeakReference *src) {
1043+
return swift_weakTakeAssign(dest, src);
10361044
}
10371045

10381046
#endif /* SWIFT_OBJC_INTEROP */
@@ -1045,14 +1053,16 @@ static inline void swift_unknownWeakTakeAssign(WeakReference *dest,
10451053

10461054
/// Initialize an unowned reference to an object with unknown reference
10471055
/// counting.
1056+
/// \return ref
10481057
SWIFT_RUNTIME_EXPORT
1049-
void swift_unknownUnownedInit(UnownedReference *ref, void *value);
1058+
UnownedReference *swift_unknownUnownedInit(UnownedReference *ref, void *value);
10501059

10511060
#else
10521061

1053-
static inline void swift_unknownUnownedInit(UnownedReference *ref,
1054-
void *value) {
1062+
static inline UnownedReference *swift_unknownUnownedInit(UnownedReference *ref,
1063+
void *value) {
10551064
swift_unownedInit(ref, static_cast<HeapObject*>(value));
1065+
return ref;
10561066
}
10571067

10581068
#endif /* SWIFT_OBJC_INTEROP */
@@ -1061,14 +1071,17 @@ static inline void swift_unknownUnownedInit(UnownedReference *ref,
10611071

10621072
/// Assign to an unowned reference holding an object with unknown reference
10631073
/// counting.
1074+
/// \return ref
10641075
SWIFT_RUNTIME_EXPORT
1065-
void swift_unknownUnownedAssign(UnownedReference *ref, void *value);
1076+
UnownedReference *swift_unknownUnownedAssign(UnownedReference *ref,
1077+
void *value);
10661078

10671079
#else
10681080

1069-
static inline void swift_unknownUnownedAssign(UnownedReference *ref,
1070-
void *value) {
1081+
static inline UnownedReference *
1082+
swift_unknownUnownedAssign(UnownedReference *ref, void *value) {
10711083
swift_unownedAssign(ref, static_cast<HeapObject*>(value));
1084+
return ref;
10721085
}
10731086

10741087
#endif /* SWIFT_OBJC_INTEROP */
@@ -1121,15 +1134,17 @@ static inline void swift_unknownUnownedDestroy(UnownedReference *ref) {
11211134

11221135
/// Copy-initialize an unowned reference variable from one that might not
11231136
/// refer to a native Swift object.
1137+
/// \return dest
11241138
SWIFT_RUNTIME_EXPORT
1125-
void swift_unknownUnownedCopyInit(UnownedReference *dest,
1126-
UnownedReference *src);
1139+
UnownedReference *swift_unknownUnownedCopyInit(UnownedReference *dest,
1140+
UnownedReference *src);
11271141

11281142
#else
11291143

1130-
static inline void swift_unknownUnownedCopyInit(UnownedReference *dest,
1131-
UnownedReference *src) {
1144+
static inline UnownedReference *
1145+
swift_unknownUnownedCopyInit(UnownedReference *dest, UnownedReference *src) {
11321146
swift_unownedCopyInit(dest, src);
1147+
return dest;
11331148
}
11341149

11351150
#endif /* SWIFT_OBJC_INTEROP */
@@ -1139,14 +1154,15 @@ static inline void swift_unknownUnownedCopyInit(UnownedReference *dest,
11391154
/// Take-initialize an unowned reference variable from one that might not
11401155
/// refer to a native Swift object.
11411156
SWIFT_RUNTIME_EXPORT
1142-
void swift_unknownUnownedTakeInit(UnownedReference *dest,
1143-
UnownedReference *src);
1157+
UnownedReference *swift_unknownUnownedTakeInit(UnownedReference *dest,
1158+
UnownedReference *src);
11441159

11451160
#else
11461161

1147-
static inline void swift_unknownUnownedTakeInit(UnownedReference *dest,
1148-
UnownedReference *src) {
1162+
static inline UnownedReference *
1163+
swift_unknownUnownedTakeInit(UnownedReference *dest, UnownedReference *src) {
11491164
swift_unownedTakeInit(dest, src);
1165+
return dest;
11501166
}
11511167

11521168
#endif /* SWIFT_OBJC_INTEROP */
@@ -1155,15 +1171,17 @@ static inline void swift_unknownUnownedTakeInit(UnownedReference *dest,
11551171

11561172
/// Copy-assign an unowned reference variable from another when either
11571173
/// or both variables might not refer to a native Swift object.
1174+
/// \return dest
11581175
SWIFT_RUNTIME_EXPORT
1159-
void swift_unknownUnownedCopyAssign(UnownedReference *dest,
1160-
UnownedReference *src);
1176+
UnownedReference *swift_unknownUnownedCopyAssign(UnownedReference *dest,
1177+
UnownedReference *src);
11611178

11621179
#else
11631180

1164-
static inline void swift_unknownUnownedCopyAssign(UnownedReference *dest,
1165-
UnownedReference *src) {
1181+
static inline UnownedReference *
1182+
swift_unknownUnownedCopyAssign(UnownedReference *dest, UnownedReference *src) {
11661183
swift_unownedCopyAssign(dest, src);
1184+
return dest;
11671185
}
11681186

11691187
#endif /* SWIFT_OBJC_INTEROP */
@@ -1172,15 +1190,17 @@ static inline void swift_unknownUnownedCopyAssign(UnownedReference *dest,
11721190

11731191
/// Take-assign an unowned reference variable from another when either
11741192
/// or both variables might not refer to a native Swift object.
1193+
/// \return dest
11751194
SWIFT_RUNTIME_EXPORT
1176-
void swift_unknownUnownedTakeAssign(UnownedReference *dest,
1177-
UnownedReference *src);
1195+
UnownedReference *swift_unknownUnownedTakeAssign(UnownedReference *dest,
1196+
UnownedReference *src);
11781197

11791198
#else
11801199

1181-
static inline void swift_unknownUnownedTakeAssign(UnownedReference *dest,
1182-
UnownedReference *src) {
1200+
static inline UnownedReference *
1201+
swift_unknownUnownedTakeAssign(UnownedReference *dest, UnownedReference *src) {
11831202
swift_unownedTakeAssign(dest, src);
1203+
return dest;
11841204
}
11851205

11861206
#endif /* SWIFT_OBJC_INTEROP */

include/swift/Runtime/RuntimeFunctions.def

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -520,15 +520,15 @@ FUNCTION(UnknownWeakDestroy, swift_unknownWeakDestroy, DefaultCC,
520520

521521
// void swift_unknownWeakInit(WeakReference *object, void *value);
522522
FUNCTION(UnknownWeakInit, swift_unknownWeakInit, DefaultCC,
523-
RETURNS(VoidTy),
523+
RETURNS(WeakReferencePtrTy),
524524
ARGS(WeakReferencePtrTy, UnknownRefCountedPtrTy),
525-
ATTRS(NoUnwind))
525+
ATTRS(NoUnwind, FirstParamReturned))
526526

527-
// void swift_unknownWeakAssign(WeakReference *object, void *value);
527+
// WeakReference *swift_unknownWeakAssign(WeakReference *object, void *value);
528528
FUNCTION(UnknownWeakAssign, swift_unknownWeakAssign, DefaultCC,
529-
RETURNS(VoidTy),
529+
RETURNS(WeakReferencePtrTy),
530530
ARGS(WeakReferencePtrTy, UnknownRefCountedPtrTy),
531-
ATTRS(NoUnwind))
531+
ATTRS(NoUnwind, FirstParamReturned))
532532

533533
// void *swift_unknownWeakLoad(WeakReference *object);
534534
FUNCTION(UnknownWeakLoadStrong, swift_unknownWeakLoadStrong,DefaultCC,
@@ -542,47 +542,47 @@ FUNCTION(UnknownWeakTakeStrong, swift_unknownWeakTakeStrong,DefaultCC,
542542
ARGS(WeakReferencePtrTy),
543543
ATTRS(NoUnwind))
544544

545-
// void swift_unknownWeakCopyInit(WeakReference *dest, WeakReference *src);
545+
// WeakReference *swift_unknownWeakCopyInit(WeakReference *dest, WeakReference *src);
546546
FUNCTION(UnknownWeakCopyInit, swift_unknownWeakCopyInit, DefaultCC,
547-
RETURNS(VoidTy),
547+
RETURNS(WeakReferencePtrTy),
548548
ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
549-
ATTRS(NoUnwind))
549+
ATTRS(NoUnwind, FirstParamReturned))
550550

551-
// void swift_unknownWeakTakeInit(WeakReference *dest, WeakReference *src);
551+
// void *swift_unknownWeakTakeInit(WeakReference *dest, WeakReference *src);
552552
FUNCTION(UnknownWeakTakeInit, swift_unknownWeakTakeInit, DefaultCC,
553-
RETURNS(VoidTy),
553+
RETURNS(WeakReferencePtrTy),
554554
ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
555-
ATTRS(NoUnwind))
555+
ATTRS(NoUnwind, FirstParamReturned))
556556

557-
// void swift_unknownWeakCopyAssign(WeakReference *dest, WeakReference *src);
557+
// WeakReference *swift_unknownWeakCopyAssign(WeakReference *dest, WeakReference *src);
558558
FUNCTION(UnknownWeakCopyAssign, swift_unknownWeakCopyAssign, DefaultCC,
559-
RETURNS(VoidTy),
559+
RETURNS(WeakReferencePtrTy),
560560
ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
561-
ATTRS(NoUnwind))
561+
ATTRS(NoUnwind, FirstParamReturned))
562562

563-
// void swift_unknownWeakTakeAssign(WeakReference *dest, WeakReference *src);
563+
// WeakReference *swift_unknownWeakTakeAssign(WeakReference *dest, WeakReference *src);
564564
FUNCTION(UnknownWeakTakeAssign, swift_unknownWeakTakeAssign, DefaultCC,
565-
RETURNS(VoidTy),
565+
RETURNS(WeakReferencePtrTy),
566566
ARGS(WeakReferencePtrTy, WeakReferencePtrTy),
567-
ATTRS(NoUnwind))
567+
ATTRS(NoUnwind, FirstParamReturned))
568568

569569
// void swift_unknownUnownedDestroy(UnownedReference *object);
570570
FUNCTION(UnknownUnownedDestroy, swift_unknownUnownedDestroy, DefaultCC,
571571
RETURNS(VoidTy),
572572
ARGS(UnownedReferencePtrTy),
573573
ATTRS(NoUnwind))
574574

575-
// void swift_unknownUnownedInit(UnownedReference *object, void *value);
575+
// UnownedReference *swift_unknownUnownedInit(UnownedReference *object, void *value);
576576
FUNCTION(UnknownUnownedInit, swift_unknownUnownedInit, DefaultCC,
577-
RETURNS(VoidTy),
577+
RETURNS(UnownedReferencePtrTy),
578578
ARGS(UnownedReferencePtrTy, UnknownRefCountedPtrTy),
579-
ATTRS(NoUnwind))
579+
ATTRS(NoUnwind, FirstParamReturned))
580580

581-
// void swift_unknownUnownedAssign(UnownedReference *object, void *value);
581+
// UnownedReference *swift_unknownUnownedAssign(UnownedReference *object, void *value);
582582
FUNCTION(UnknownUnownedAssign, swift_unknownUnownedAssign, DefaultCC,
583-
RETURNS(VoidTy),
583+
RETURNS(UnownedReferencePtrTy),
584584
ARGS(UnownedReferencePtrTy, UnknownRefCountedPtrTy),
585-
ATTRS(NoUnwind))
585+
ATTRS(NoUnwind, FirstParamReturned))
586586

587587
// void *swift_unknownUnownedLoad(UnownedReference *object);
588588
FUNCTION(UnknownUnownedLoadStrong, swift_unknownUnownedLoadStrong, DefaultCC,
@@ -596,29 +596,29 @@ FUNCTION(UnknownUnownedTakeStrong, swift_unknownUnownedTakeStrong, DefaultCC,
596596
ARGS(UnownedReferencePtrTy),
597597
ATTRS(NoUnwind))
598598

599-
// void swift_unknownUnownedCopyInit(UnownedReference *dest, UnownedReference *src);
599+
// UnownedReference *swift_unknownUnownedCopyInit(UnownedReference *dest, UnownedReference *src);
600600
FUNCTION(UnknownUnownedCopyInit, swift_unknownUnownedCopyInit, DefaultCC,
601-
RETURNS(VoidTy),
601+
RETURNS(UnownedReferencePtrTy),
602602
ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
603-
ATTRS(NoUnwind))
603+
ATTRS(NoUnwind, FirstParamReturned))
604604

605-
// void swift_unknownUnownedTakeInit(UnownedReference *dest, UnownedReference *src);
605+
// UnownedReference *swift_unknownUnownedTakeInit(UnownedReference *dest, UnownedReference *src);
606606
FUNCTION(UnknownUnownedTakeInit, swift_unknownUnownedTakeInit, DefaultCC,
607-
RETURNS(VoidTy),
607+
RETURNS(UnownedReferencePtrTy),
608608
ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
609-
ATTRS(NoUnwind))
609+
ATTRS(NoUnwind, FirstParamReturned))
610610

611-
// void swift_unknownUnownedCopyAssign(UnownedReference *dest, UnownedReference *src);
611+
// UnownedReference *swift_unknownUnownedCopyAssign(UnownedReference *dest, UnownedReference *src);
612612
FUNCTION(UnknownUnownedCopyAssign, swift_unknownUnownedCopyAssign, DefaultCC,
613-
RETURNS(VoidTy),
613+
RETURNS(UnownedReferencePtrTy),
614614
ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
615-
ATTRS(NoUnwind))
615+
ATTRS(NoUnwind, FirstParamReturned))
616616

617-
// void swift_unknownUnownedTakeAssign(UnownedReference *dest, UnownedReference *src);
617+
// UnownedReference *swift_unknownUnownedTakeAssign(UnownedReference *dest, UnownedReference *src);
618618
FUNCTION(UnknownUnownedTakeAssign, swift_unknownUnownedTakeAssign, DefaultCC,
619-
RETURNS(VoidTy),
619+
RETURNS(UnownedReferencePtrTy),
620620
ARGS(UnownedReferencePtrTy, UnownedReferencePtrTy),
621-
ATTRS(NoUnwind))
621+
ATTRS(NoUnwind, FirstParamReturned))
622622

623623
// bool swift_isUniquelyReferencedNonObjC(const void *);
624624
FUNCTION(IsUniquelyReferencedNonObjC, swift_isUniquelyReferencedNonObjC,

0 commit comments

Comments
 (0)