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// rdar://11144048
4
5@class NSString;
6
7@interface NSObject {
8    Class isa;
9}
10@end
11
12@interface Sub : NSObject {
13    int subIvar;
14    NSString *nsstring;
15@private
16    id PrivateIvar;
17}
18@end
19
20@implementation Sub
21- (id) MyNSString { return subIvar ? PrivateIvar : nsstring; }
22@end
23
24@interface NSString @end
25@implementation NSString @end
26
27// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$subIvar;
28// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long OBJC_IVAR_$_Sub$PrivateIvar;
29// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$nsstring;
30// CHECK: #pragma warning(disable:4273)
31// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$subIvar
32// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$nsstring
33// CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long int OBJC_IVAR_$_Sub$PrivateIvar
34// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject;
35// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_Sub
36// CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject;
37// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_Sub
38// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString;
39// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_NSString
40// CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString
41