1*67e74705SXin Li// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-runtime=macosx-fragile-10.5 %s -o %t-rw.cpp 2*67e74705SXin Li// RUN: FileCheck -check-prefix CHECK-LP --input-file=%t-rw.cpp %s 3*67e74705SXin Li// radar 7575882 4*67e74705SXin Li 5*67e74705SXin Li@interface F { 6*67e74705SXin Li int supervar; 7*67e74705SXin Li} 8*67e74705SXin Li@end 9*67e74705SXin Li 10*67e74705SXin Li@interface G : F { 11*67e74705SXin Li@public 12*67e74705SXin Li int ivar; 13*67e74705SXin Li} 14*67e74705SXin Li@end 15*67e74705SXin Li 16*67e74705SXin Li@implementation G 17*67e74705SXin Li- (void)foo:(F *)arg { 18*67e74705SXin Li int q = arg->supervar; 19*67e74705SXin Li int v = ((G *)arg)->ivar; 20*67e74705SXin Li} 21*67e74705SXin Li@end 22*67e74705SXin Li 23*67e74705SXin Livoid objc_assign_strongCast(id); 24*67e74705SXin Livoid __CFAssignWithWriteBarrier(void **location, void *value) { 25*67e74705SXin Li objc_assign_strongCast((id)value); 26*67e74705SXin Li} 27*67e74705SXin Li 28*67e74705SXin Li// radar 7607605 29*67e74705SXin Li@interface RealClass { 30*67e74705SXin Li @public 31*67e74705SXin Li int f; 32*67e74705SXin Li} 33*67e74705SXin Li@end 34*67e74705SXin Li 35*67e74705SXin Li@implementation RealClass 36*67e74705SXin Li@end 37*67e74705SXin Li 38*67e74705SXin Li@interface Foo { 39*67e74705SXin Li id reserved; 40*67e74705SXin Li} 41*67e74705SXin Li@end 42*67e74705SXin Li 43*67e74705SXin Li@implementation Foo 44*67e74705SXin Li- (void)bar { 45*67e74705SXin Li ((RealClass*)reserved)->f = 99; 46*67e74705SXin Li} 47*67e74705SXin Li@end 48*67e74705SXin Li 49*67e74705SXin Li// CHECK-LP: ((struct G_IMPL *)arg)->ivar 50*67e74705SXin Li 51*67e74705SXin Li// CHECK-LP: objc_assign_strongCast((id)value) 52*67e74705SXin Li 53*67e74705SXin Li// CHECK-LP: ((struct RealClass_IMPL *)((RealClass *)((struct Foo_IMPL *)self)->reserved))->f 54