xref: /aosp_15_r20/external/clang/test/CodeGenObjCXX/property-dot-reference.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s
2*67e74705SXin Li// rdar://8409336
3*67e74705SXin Li
4*67e74705SXin Listruct TFENode {
5*67e74705SXin Livoid GetURL() const;
6*67e74705SXin Li};
7*67e74705SXin Li
8*67e74705SXin Li@interface TNodeIconAndNameCell
9*67e74705SXin Li- (const TFENode&) node;
10*67e74705SXin Li@end
11*67e74705SXin Li
12*67e74705SXin Li@implementation TNodeIconAndNameCell
13*67e74705SXin Li- (const TFENode&) node {
14*67e74705SXin Li// CHECK: call dereferenceable({{[0-9]+}}) %struct.TFENode* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
15*67e74705SXin Li// CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(%struct.TFENode* %{{.*}})
16*67e74705SXin Li	self.node.GetURL();
17*67e74705SXin Li}	// expected-warning {{control reaches end of non-void function}}
18*67e74705SXin Li@end
19*67e74705SXin Li
20*67e74705SXin Li// rdar://8437240
21*67e74705SXin Listruct X {
22*67e74705SXin Li  int x;
23*67e74705SXin Li};
24*67e74705SXin Li
25*67e74705SXin Livoid f0(const X &parent);
26*67e74705SXin Li@interface A
27*67e74705SXin Li- (const X&) target;
28*67e74705SXin Li@end
29*67e74705SXin Livoid f1(A *a) {
30*67e74705SXin Li// CHECK: [[PRP:%.*]] = call dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
31*67e74705SXin Li// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* dereferenceable({{[0-9]+}}) [[PRP]])
32*67e74705SXin Li  f0(a.target);
33*67e74705SXin Li
34*67e74705SXin Li// CHECK: [[MSG:%.*]] = call dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
35*67e74705SXin Li// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* dereferenceable({{[0-9]+}}) [[MSG]])
36*67e74705SXin Li  f0([a target]);
37*67e74705SXin Li}
38*67e74705SXin Li
39*67e74705SXin Li@interface Test2
40*67e74705SXin Li@property (readonly) int myProperty;
41*67e74705SXin Li- (int) myProperty;
42*67e74705SXin Li- (double) myGetter;
43*67e74705SXin Li@end
44*67e74705SXin Livoid test2() {
45*67e74705SXin Li    Test2 *obj;
46*67e74705SXin Li    (void) obj.myProperty;
47*67e74705SXin Li    (void) obj.myGetter;
48*67e74705SXin Li    static_cast<void>(obj.myProperty);
49*67e74705SXin Li    static_cast<void>(obj.myGetter);
50*67e74705SXin Li    void(obj.myProperty);
51*67e74705SXin Li    void(obj.myGetter);
52*67e74705SXin Li}
53*67e74705SXin Li// CHECK-LABEL: define void @_Z5test2v()
54*67e74705SXin Li// CHECK: call i32 bitcast
55*67e74705SXin Li// CHECK: call double bitcast
56*67e74705SXin Li// CHECK: call i32 bitcast
57*67e74705SXin Li// CHECK: call double bitcast
58*67e74705SXin Li// CHECK: call i32 bitcast
59*67e74705SXin Li// CHECK: call double bitcast
60*67e74705SXin Li
61*67e74705SXin Li// PR8751
62*67e74705SXin Liint test3(Test2 *obj) { return obj.myProperty; }
63