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