Home | History | Annotate | Download | only in CodeGenObjCXX
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s
      2 // rdar://8409336
      3 
      4 struct TFENode {
      5 void 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
     21 struct X {
     22   int x;
     23 };
     24 
     25 void f0(const X &parent);
     26 @interface A
     27 - (const X&) target;
     28 @end
     29 void 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
     44 void 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
     62 int test3(Test2 *obj) { return obj.myProperty; }
     63