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