brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 951bb11 Raw
50 lines · plain
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s2 3template <typename T> struct Quad2 {4  Quad2() {}5};6 7typedef Quad2<double> Quad2d;8 9@interface Root @end10 11@interface PAGeometryFrame12- (const Quad2d &)quad;13- (void)setQuad:(const Quad2d &)quad;14@end15 16@interface PA2DScaleTransform  : Root17@end18 19@implementation PA2DScaleTransform20- (void)transformFrame:(PAGeometryFrame *)frame {21 PAGeometryFrame *result;22 result.quad  = frame.quad;23}24@end25 26// CHECK:   [[SEL:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_, align 8, !invariant.load ![[MD_NUM:[0-9]+]]27// CHECK:   [[CALL:%.*]] = call noundef nonnull align 1 ptr @objc_msgSend(ptr noundef [[ONE:%.*]], ptr noundef [[SEL]])28// CHECK:   [[SEL2:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_.2, align 8, !invariant.load ![[MD_NUM]]29// CHECK:   call void @objc_msgSend(ptr noundef [[ZERO:%.*]], ptr noundef [[SEL2]], ptr noundef nonnull align 1 [[CALL]])30 31 32struct A {33 void *ptr;34 A();35 A(const A &);36 ~A();37};38 39@interface C40- (void) setProp: (const A&) value;41@end42void test(C *c, const A &a) {43 const A &result = c.prop = a;44}45 46// CHECK:   [[ONE1:%.*]] = load ptr, ptr [[AADDR:%.*]], align 847// CHECK:   [[SEL3:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_.5, align 8, !invariant.load ![[MD_NUM]]48// CHECK:   call void @objc_msgSend(ptr noundef [[ZERO1:%.*]], ptr noundef [[SEL3]], ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[ONE1]])49// CHECK:   store ptr [[ONE1]], ptr [[RESULT:%.*]], align 850