|  | // RUN: rm -rf %t | 
|  | // RUN: split-file %s %t | 
|  | // RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json | 
|  |  | 
|  | // RUN: clang-installapi -target arm64-apple-macos13.1 \ | 
|  | // RUN: -F%t -install_name /System/Library/Frameworks/Foo.framework/Foo \ | 
|  | // RUN: %t/inputs.json -o %t/outputs.tbd -v 2>&1 | FileCheck %s --check-prefix=VERBOSE | 
|  | // RUN: llvm-readtapi -compare %t/outputs.tbd %t/expected.tbd 2>&1 | FileCheck %s --allow-empty | 
|  |  | 
|  | // VERBOSE:       Public Headers: | 
|  | // VERBOSE-NEXT:  #import <Foo/Foo.h> | 
|  | // CHECK-NOT:     error: | 
|  | // CHECK-NOT:     warning: | 
|  |  | 
|  | //--- Foo.framework/Headers/Foo.h | 
|  | // Ignore forward declaration. | 
|  | @class NSObject; | 
|  |  | 
|  | @interface Visible | 
|  | @end | 
|  |  | 
|  | __attribute__((visibility("hidden"))) | 
|  | @interface Hidden | 
|  | @end | 
|  |  | 
|  | __attribute__((visibility("hidden"))) | 
|  | @interface HiddenWithIvars { | 
|  | @public | 
|  | char _ivar; | 
|  | } | 
|  | @end | 
|  |  | 
|  | __attribute__((objc_exception)) | 
|  | @interface Exception | 
|  | @end | 
|  |  | 
|  | @interface PublicClass : Visible  { | 
|  | @package | 
|  | int _internal; | 
|  | @protected | 
|  | int _external; | 
|  | @private | 
|  | int private; | 
|  | @public | 
|  | char _public; | 
|  | } | 
|  | @end | 
|  |  | 
|  |  | 
|  | //--- Foo.framework/PrivateHeaders/Foo_Private.h | 
|  | #import <Foo/Foo.h> | 
|  |  | 
|  | @interface ClassWithIvars : Visible  { | 
|  | char _ivar1; | 
|  | char _ivar2; | 
|  | @private | 
|  | int _privateIVar; | 
|  | @protected | 
|  | int _externalIVar; | 
|  | @package | 
|  | int _internalIVar; | 
|  | } | 
|  | @end | 
|  |  | 
|  | @interface Exception () { | 
|  | @public | 
|  | char _ivarFromExtension; | 
|  | @private | 
|  | int _privateIvarFromExtension; | 
|  | } | 
|  | @end | 
|  |  | 
|  |  | 
|  | //--- inputs.json.in | 
|  | { | 
|  | "headers": [ { | 
|  | "path" : "DSTROOT/Foo.framework/Headers/Foo.h", | 
|  | "type" : "public" | 
|  | }, | 
|  | { | 
|  | "path" : "DSTROOT/Foo.framework/PrivateHeaders/Foo_Private.h", | 
|  | "type" : "private" | 
|  | } | 
|  | ], | 
|  | "version": "3" | 
|  | } | 
|  |  | 
|  | //--- expected.tbd | 
|  | { | 
|  | "main_library": { | 
|  | "compatibility_versions": [ | 
|  | { | 
|  | "version": "0" | 
|  | } | 
|  | ], | 
|  | "current_versions": [ | 
|  | { | 
|  | "version": "0" | 
|  | } | 
|  | ], | 
|  | "exported_symbols": [ | 
|  | { | 
|  | "data": { | 
|  | "objc_class": [ | 
|  | "PublicClass", | 
|  | "Exception", | 
|  | "Visible", | 
|  | "ClassWithIvars" | 
|  | ], | 
|  | "objc_eh_type": [ | 
|  | "Exception" | 
|  | ], | 
|  | "objc_ivar": [ | 
|  | "Exception._ivarFromExtension", | 
|  | "ClassWithIvars._ivar2", | 
|  | "PublicClass._external", | 
|  | "ClassWithIvars._ivar1", | 
|  | "ClassWithIvars._externalIVar", | 
|  | "PublicClass._public" | 
|  | ] | 
|  | } | 
|  | } | 
|  | ], | 
|  | "flags": [ | 
|  | { | 
|  | "attributes": [ | 
|  | "not_app_extension_safe" | 
|  | ] | 
|  | } | 
|  | ], | 
|  | "install_names": [ | 
|  | { | 
|  | "name": "/System/Library/Frameworks/Foo.framework/Foo" | 
|  | } | 
|  | ], | 
|  | "target_info": [ | 
|  | { | 
|  | "min_deployment": "13.1", | 
|  | "target": "arm64-macos" | 
|  | } | 
|  | ] | 
|  | }, | 
|  | "tapi_tbd_version": 5 | 
|  | } |