diff --git a/clang/test/APINotes/Inputs/Headers/SwiftReturnOwnershipForObjC.apinotes b/clang/test/APINotes/Inputs/Headers/SwiftReturnOwnershipForObjC.apinotes new file mode 100644 index 0000000000000..4b749b40e026f --- /dev/null +++ b/clang/test/APINotes/Inputs/Headers/SwiftReturnOwnershipForObjC.apinotes @@ -0,0 +1,17 @@ +--- +Name: SwiftImportAsForObjC +Classes: + - Name: MethodTest + Methods: + - Selector: getUnowned + MethodKind: Instance + SwiftReturnOwnership: unretained + - Selector: getOwned + MethodKind: Instance + SwiftReturnOwnership: retained + +Functions: + - Name: getObjCUnowned + SwiftReturnOwnership: unretained + - Name: getObjCOwned + SwiftReturnOwnership: retained diff --git a/clang/test/APINotes/Inputs/Headers/SwiftReturnOwnershipForObjC.h b/clang/test/APINotes/Inputs/Headers/SwiftReturnOwnershipForObjC.h new file mode 100644 index 0000000000000..83e2535387caa --- /dev/null +++ b/clang/test/APINotes/Inputs/Headers/SwiftReturnOwnershipForObjC.h @@ -0,0 +1,9 @@ +struct RefCountedType { int value; }; + +@interface MethodTest +- (struct RefCountedType *)getUnowned; +- (struct RefCountedType *)getOwned; +@end + +struct RefCountedType * getObjCUnowned(void); +struct RefCountedType * getObjCOwned(void); diff --git a/clang/test/APINotes/Inputs/Headers/module.modulemap b/clang/test/APINotes/Inputs/Headers/module.modulemap index 31f7d36356d83..bedb7d505f794 100644 --- a/clang/test/APINotes/Inputs/Headers/module.modulemap +++ b/clang/test/APINotes/Inputs/Headers/module.modulemap @@ -57,3 +57,7 @@ module Templates { module SwiftImportAs { header "SwiftImportAs.h" } + +module SwiftReturnOwnershipForObjC { + header "SwiftReturnOwnershipForObjC.h" +} diff --git a/clang/test/APINotes/swift-return-ownership.m b/clang/test/APINotes/swift-return-ownership.m new file mode 100644 index 0000000000000..b1221d159e610 --- /dev/null +++ b/clang/test/APINotes/swift-return-ownership.m @@ -0,0 +1,11 @@ +// RUN: rm -rf %t && mkdir -p %t +// RUN: %clang_cc1 -fmodules -fblocks -fimplicit-module-maps -fmodules-cache-path=%t/ModulesCache -fdisable-module-hash -fapinotes-modules -fsyntax-only -I %S/Inputs/Headers %s +// RUN: %clang_cc1 -ast-print %t/ModulesCache/SwiftReturnOwnershipForObjC.pcm | FileCheck %s +#import + +// CHECK: @interface MethodTest +// CHECK: - (struct RefCountedType *)getUnowned __attribute__((swift_attr("returns_unretained"))); +// CHECK: - (struct RefCountedType *)getOwned __attribute__((swift_attr("returns_retained"))); +// CHECK: @end +// CHECK: __attribute__((swift_attr("returns_unretained"))) struct RefCountedType *getObjCUnowned(void); +// CHECK: __attribute__((swift_attr("returns_retained"))) struct RefCountedType *getObjCOwned(void);