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 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 {{control reaches end of non-void function}} 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 dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend 31// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* dereferenceable({{[0-9]+}}) [[PRP]]) 32 f0(a.target); 33 34// CHECK: [[MSG:%.*]] = call dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend 35// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* 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