xref: /aosp_15_r20/external/clang/test/Rewriter/rewrite-cast-ivar-access.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
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