From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/CodeGenObjCXX/property-dot-reference.mm | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 clang/test/CodeGenObjCXX/property-dot-reference.mm (limited to 'clang/test/CodeGenObjCXX/property-dot-reference.mm') diff --git a/clang/test/CodeGenObjCXX/property-dot-reference.mm b/clang/test/CodeGenObjCXX/property-dot-reference.mm new file mode 100644 index 0000000..e64b397 --- /dev/null +++ b/clang/test/CodeGenObjCXX/property-dot-reference.mm @@ -0,0 +1,62 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s +// rdar://8409336 + +struct TFENode { +void GetURL() const; +}; + +@interface TNodeIconAndNameCell +- (const TFENode&) node; +@end + +@implementation TNodeIconAndNameCell +- (const TFENode&) node { +// CHECK: call %struct.TFENode* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend +// CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(%struct.TFENode* %{{.*}}) + self.node.GetURL(); +} // expected-warning {{control reaches end of non-void function}} +@end + +// rdar://8437240 +struct X { + int x; +}; + +void f0(const X &parent); +@interface A +- (const X&) target; +@end +void f1(A *a) { +// CHECK: [[PRP:%.*]] = call %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend +// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* [[PRP]]) + f0(a.target); + +// CHECK: [[MSG:%.*]] = call %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend +// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* [[MSG]]) + f0([a target]); +} + +@interface Test2 +@property (readonly) int myProperty; +- (int) myProperty; +- (double) myGetter; +@end +void test2() { + Test2 *obj; + (void) obj.myProperty; + (void) obj.myGetter; + static_cast(obj.myProperty); + static_cast(obj.myGetter); + void(obj.myProperty); + void(obj.myGetter); +} +// CHECK: define void @_Z5test2v() +// CHECK: call i32 bitcast +// CHECK: call double bitcast +// CHECK: call i32 bitcast +// CHECK: call double bitcast +// CHECK: call i32 bitcast +// CHECK: call double bitcast + +// PR8751 +int test3(Test2 *obj) { return obj.myProperty; } -- cgit v1.2.3