// RUN: %clang_cc1 -x objective-c++ -fblocks -fms-extensions -rewrite-objc -fobjc-runtime=macosx-fragile-10.5 %s -o %t-rw.cpp // RUN: FileCheck -check-prefix CHECK-LP --input-file=%t-rw.cpp %s // radar 7575882 @interface F { int supervar; } @end @interface G : F { @public int ivar; } @end @implementation G - (void)foo:(F *)arg { int q = arg->supervar; int v = ((G *)arg)->ivar; } @end void objc_assign_strongCast(id); void __CFAssignWithWriteBarrier(void **location, void *value) { objc_assign_strongCast((id)value); } // radar 7607605 @interface RealClass { @public int f; } @end @implementation RealClass @end @interface Foo { id reserved; } @end @implementation Foo - (void)bar { ((RealClass*)reserved)->f = 99; } @end // CHECK-LP: ((struct G_IMPL *)arg)->ivar // CHECK-LP: objc_assign_strongCast((id)value) // CHECK-LP: ((struct RealClass_IMPL *)((RealClass *)((struct Foo_IMPL *)self)->reserved))->f |