xref: /llvm-project/clang/test/Rewriter/objc-modern-metadata-visibility.mm (revision 0f1c1be1968076d6f96f8a7bcc4a15cf195ecd97)
1// RUN: %clang_cc1 -E %s -o %t.mm
2// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s
3
4@class NSString;
5
6@interface NSObject {
7    Class isa;
8}
9@end
10
11@interface Sub : NSObject {
12    int subIvar;
13    NSString *nsstring;
14@private
15    id PrivateIvar;
16}
17@end
18
19@implementation Sub
20- (id) MyNSString { return subIvar ? PrivateIvar : nsstring; }
21@end
22
23@interface NSString @end
24@implementation NSString @end
25
26// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$subIvar;
27// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long OBJC_IVAR_$_Sub$PrivateIvar;
28// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$nsstring;
29// CHECK: #pragma warning(disable:4273)
30// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$subIvar
31// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$nsstring
32// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long int OBJC_IVAR_$_Sub$PrivateIvar
33// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject;
34// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_Sub
35// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject;
36// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_Sub
37// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString;
38// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_NSString
39// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString
40