| // RUN: %clang_cc1 -E %s -o %t.mm | 
 | // RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc %t.mm -o - | FileCheck %s  | 
 | // rdar://11144048 | 
 |  | 
 | @class NSString; | 
 |  | 
 | @interface NSObject { | 
 |     Class isa; | 
 | } | 
 | @end | 
 |  | 
 | @interface Sub : NSObject { | 
 |     int subIvar; | 
 |     NSString *nsstring; | 
 | @private | 
 |     id PrivateIvar; | 
 | } | 
 | @end | 
 |  | 
 | @implementation Sub  | 
 | - (id) MyNSString { return subIvar ? PrivateIvar : nsstring; } | 
 | @end | 
 |  | 
 | @interface NSString @end | 
 | @implementation NSString @end | 
 |  | 
 | // CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$subIvar; | 
 | // CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long OBJC_IVAR_$_Sub$PrivateIvar; | 
 | // CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllimport) unsigned long OBJC_IVAR_$_Sub$nsstring; | 
 | // CHECK: #pragma warning(disable:4273) | 
 | // CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$subIvar | 
 | // CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" __declspec(dllexport) unsigned long int OBJC_IVAR_$_Sub$nsstring | 
 | // CHECK: __declspec(allocate(".objc_ivar$B")) extern "C" unsigned long int OBJC_IVAR_$_Sub$PrivateIvar | 
 | // CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_METACLASS_$_NSObject; | 
 | // CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_Sub | 
 | // CHECK: extern "C" __declspec(dllimport) struct _class_t OBJC_CLASS_$_NSObject; | 
 | // CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_Sub | 
 | // CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString; | 
 | // CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_METACLASS_$_NSString | 
 | // CHECK: extern "C" __declspec(dllexport) struct _class_t OBJC_CLASS_$_NSString |