@@ -430,4 +430,72 @@ void drelease(
430
430
DefaultOwnershipSuppressUnannotatedAPIWarning::RefTypeDefaultRetained *v) {
431
431
};
432
432
433
+ namespace DefaultOwnershipInheritance {
434
+
435
+ struct __attribute__ ((swift_attr(" import_reference" )))
436
+ __attribute__ ((swift_attr(" retain:baseRetain" )))
437
+ __attribute__ ((swift_attr(" release:baseRelease" )))
438
+ __attribute__ ((swift_attr(" returns_retained_by_default" ))) BaseType {};
439
+
440
+ struct __attribute__ ((swift_attr(" import_reference" )))
441
+ __attribute__ ((swift_attr(" retain:derivedRetain" )))
442
+ __attribute__ ((swift_attr(" release:derivedRelease" ))) DerivedType
443
+ : public BaseType {};
444
+
445
+ struct __attribute__ ((swift_attr(" import_reference" )))
446
+ __attribute__ ((swift_attr(" retain:derivedRetain2" )))
447
+ __attribute__ ((swift_attr(" release:derivedRelease2" ))) DerivedType2
448
+ : public DerivedType {};
449
+
450
+ struct __attribute__ ((swift_attr(" import_reference" )))
451
+ __attribute__ ((swift_attr(" retain:derivedRetain3" )))
452
+ __attribute__ ((swift_attr(" release:derivedRelease3" ))) __attribute__((
453
+ swift_attr (" returns_unretained_by_default" ))) DerivedTypeOverrideDefault
454
+ : public DerivedType {};
455
+
456
+ BaseType *returnBaseType () { return new BaseType (); }
457
+ DerivedType *returnDerivedType () { return new DerivedType (); }
458
+ DerivedType2 *returnDerivedType2 () { return new DerivedType2 (); }
459
+ DerivedTypeOverrideDefault *returnDerivedTypeOverrideDefault () {
460
+ return new DerivedTypeOverrideDefault ();
461
+ }
462
+
463
+ struct __attribute__ ((swift_attr(" import_reference" )))
464
+ __attribute__ ((swift_attr(" retain:bRetain" )))
465
+ __attribute__ ((swift_attr(" release:bRelease" ))) BaseTypeNonDefault {};
466
+
467
+ struct __attribute__ ((swift_attr(" import_reference" )))
468
+ __attribute__ ((swift_attr(" retain:dRetain" )))
469
+ __attribute__ ((swift_attr(" release:dRelease" ))) DerivedTypeNonDefault
470
+ : public BaseTypeNonDefault {};
471
+
472
+ BaseTypeNonDefault *returnBaseTypeNonDefault () { // expected-warning {{'returnBaseTypeNonDefault' should be annotated with either SWIFT_RETURNS_RETAINED or SWIFT_RETURNS_UNRETAINED as it is returning a SWIFT_SHARED_REFERENCE}}
473
+ return new BaseTypeNonDefault ();
474
+ }
475
+ DerivedTypeNonDefault *returnDerivedTypeNonDefault () { // expected-warning {{'returnDerivedTypeNonDefault' should be annotated with either SWIFT_RETURNS_RETAINED or SWIFT_RETURNS_UNRETAINED as it is returning a SWIFT_SHARED_REFERENCE}}
476
+ return new DerivedTypeNonDefault ();
477
+ }
478
+
479
+ } // namespace DefaultOwnershipInheritance
480
+
481
+ void baseRetain (DefaultOwnershipInheritance::BaseType *v) {};
482
+ void baseRelease (DefaultOwnershipInheritance::BaseType *v) {};
483
+
484
+ void derivedRetain (DefaultOwnershipInheritance::DerivedType *v) {};
485
+ void derivedRelease (DefaultOwnershipInheritance::DerivedType *v) {};
486
+
487
+ void derivedRetain2 (DefaultOwnershipInheritance::DerivedType2 *v) {};
488
+ void derivedRelease2 (DefaultOwnershipInheritance::DerivedType2 *v) {};
489
+
490
+ void derivedRetain3 (
491
+ DefaultOwnershipInheritance::DerivedTypeOverrideDefault *v) {};
492
+ void derivedRelease3 (
493
+ DefaultOwnershipInheritance::DerivedTypeOverrideDefault *v) {};
494
+
495
+ void bRetain (DefaultOwnershipInheritance::BaseTypeNonDefault *v) {};
496
+ void bRelease (DefaultOwnershipInheritance::BaseTypeNonDefault *v) {};
497
+
498
+ void dRetain (DefaultOwnershipInheritance::DerivedTypeNonDefault *v) {};
499
+ void dRelease (DefaultOwnershipInheritance::DerivedTypeNonDefault *v) {};
500
+
433
501
SWIFT_END_NULLABILITY_ANNOTATIONS
0 commit comments