[Clang] Convert some tests to opaque pointers (NFC)
This commit is contained in:
parent
f3269a94e7
commit
2c3c1902a3
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fexceptions -o - %s | FileCheck %s
|
||||
// rdar://8409336
|
||||
|
||||
struct TFENode {
|
||||
@ -11,8 +11,8 @@ void GetURL() const;
|
||||
|
||||
@implementation TNodeIconAndNameCell
|
||||
- (const TFENode&) node {
|
||||
// CHECK: call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %struct.TFENode* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||
// CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(%struct.TFENode* {{[^,]*}} %{{.*}})
|
||||
// CHECK: call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @objc_msgSend
|
||||
// CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(ptr {{[^,]*}} %{{.*}})
|
||||
self.node.GetURL();
|
||||
} // expected-warning {{non-void function does not return a value}}
|
||||
@end
|
||||
@ -27,12 +27,12 @@ void f0(const X &parent);
|
||||
- (const X&) target;
|
||||
@end
|
||||
void f1(A *a) {
|
||||
// CHECK: [[PRP:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||
// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[PRP]])
|
||||
// CHECK: [[PRP:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @objc_msgSend
|
||||
// CHECK-NEXT:call void @_Z2f0RK1X(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[PRP]])
|
||||
f0(a.target);
|
||||
|
||||
// CHECK: [[MSG:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||
// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[MSG]])
|
||||
// CHECK: [[MSG:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @objc_msgSend
|
||||
// CHECK-NEXT:call void @_Z2f0RK1X(ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[MSG]])
|
||||
f0([a target]);
|
||||
}
|
||||
|
||||
@ -51,12 +51,12 @@ void test2() {
|
||||
void(obj.myGetter);
|
||||
}
|
||||
// CHECK-LABEL: define{{.*}} void @_Z5test2v()
|
||||
// CHECK: call noundef i32 bitcast
|
||||
// CHECK: call noundef double bitcast
|
||||
// CHECK: call noundef i32 bitcast
|
||||
// CHECK: call noundef double bitcast
|
||||
// CHECK: call noundef i32 bitcast
|
||||
// CHECK: call noundef double bitcast
|
||||
// CHECK: call noundef i32
|
||||
// CHECK: call noundef double
|
||||
// CHECK: call noundef i32
|
||||
// CHECK: call noundef double
|
||||
// CHECK: call noundef i32
|
||||
// CHECK: call noundef double
|
||||
|
||||
// PR8751
|
||||
int test3(Test2 *obj) { return obj.myProperty; }
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers -no-enable-noundef-analysis -fblocks -disable-llvm-passes -triple x86_64-apple-darwin10 -std=c++17 -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -no-enable-noundef-analysis -fblocks -disable-llvm-passes -triple x86_64-apple-darwin10 -std=c++17 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
typedef void (^blk_t)();
|
||||
typedef void (*fnptr_t)();
|
||||
@ -19,12 +19,12 @@ void t1(X *x) {
|
||||
// Check that we call lambda.operator blk_t(), and that we send that result to
|
||||
// the setter.
|
||||
|
||||
// CHECK: [[CALL:%.*]] = call void ()* @"_ZZ2t1P1XENK3$_0cvU13block_pointerFvvEEv"
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} void ()* [[CALL]])
|
||||
// CHECK: [[CALL:%.*]] = call ptr @"_ZZ2t1P1XENK3$_0cvU13block_pointerFvvEEv"
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} ptr [[CALL]])
|
||||
x.blk = [] {};
|
||||
|
||||
// CHECK: [[CALL2:%.*]] = call void ()* @"_ZZ2t1P1XENK3$_1cvPFvvEEv"
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} void ()* [[CALL2]])
|
||||
// CHECK: [[CALL2:%.*]] = call ptr @"_ZZ2t1P1XENK3$_1cvPFvvEEv"
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} ptr [[CALL2]])
|
||||
x.fnptr = [] {};
|
||||
}
|
||||
|
||||
@ -35,13 +35,13 @@ void t2(X *x) {
|
||||
|
||||
// [x setBlk: operator+([x blk], [] {})]
|
||||
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}
|
||||
// CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_0EU13block_pointerFvvES4_T_"
|
||||
// CHECK: call ptr{{.*}}@objc_msgSend{{.*}}
|
||||
// CHECK: [[PLUS:%.*]] = call ptr @"_ZplIZ2t2P1XE3$_0EU13block_pointerFvvES4_T_"
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} [[PLUS]])
|
||||
x.blk += [] {};
|
||||
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}
|
||||
// CHECK: [[PLUS:%.*]] = call void ()* @"_ZplIZ2t2P1XE3$_1EPFvvES4_T_"
|
||||
// CHECK: call ptr{{.*}}@objc_msgSend{{.*}}
|
||||
// CHECK: [[PLUS:%.*]] = call ptr @"_ZplIZ2t2P1XE3$_1EPFvvES4_T_"
|
||||
// CHECK: call void{{.*}}@objc_msgSend{{.*}}({{.*}} [[PLUS]])
|
||||
x.fnptr += [] {};
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
struct CGRect {
|
||||
char* origin;
|
||||
@ -22,12 +22,11 @@ extern "C" bool CGRectIsEmpty(CGRect);
|
||||
CGRect dataRect;
|
||||
CGRect virtualBounds;
|
||||
|
||||
// CHECK: [[SRC:%.*]] = call { i8*, i32 } bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||
// CHECK-NEXT: bitcast
|
||||
// CHECK-NEXT:getelementptr inbounds { i8*, i32 }, { i8*, i32 }* [[SRC:%.*]]
|
||||
// CHECK: [[SRC:%.*]] = call { ptr, i32 } @objc_msgSend
|
||||
// CHECK-NEXT:getelementptr inbounds { ptr, i32 }, ptr [[SRC:%.*]]
|
||||
// CHECK-NEXT:extractvalue
|
||||
// CHECK-NEXT:store
|
||||
// CHECK-NEXT:getelementptr inbounds { i8*, i32 }, { i8*, i32 }* [[SRC:%.*]]
|
||||
// CHECK-NEXT:getelementptr inbounds { ptr, i32 }, ptr [[SRC:%.*]]
|
||||
// CHECK-NEXT:extractvalue
|
||||
// CHECK-NEXT:store
|
||||
dataRect = CGRectIsEmpty(virtualBounds) ? self.bounds : virtualBounds;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers -x objective-c++ %s -triple x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 -x objective-c++ %s -triple x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
||||
// rdar://6137845
|
||||
|
||||
struct TCPPObject
|
||||
@ -24,8 +24,7 @@ struct TCPPObject
|
||||
|
||||
@end
|
||||
|
||||
// CHECK: [[cppObjectaddr:%.*]] = alloca %struct.TCPPObject*, align 8
|
||||
// CHECK: store %struct.TCPPObject* [[cppObject:%.*]], %struct.TCPPObject** [[cppObjectaddr]], align 8
|
||||
// CHECK: [[THREE:%.*]] = load %struct.TCPPObject*, %struct.TCPPObject** [[cppObjectaddr]], align 8
|
||||
// CHECK: [[FOUR:%.*]] = bitcast %struct.TCPPObject* [[THREE]] to i8*
|
||||
// CHECK: call void @objc_copyStruct(i8* noundef [[TWO:%.*]], i8* noundef [[FOUR]], i64 noundef 256, i1 noundef zeroext true, i1 noundef zeroext false)
|
||||
// CHECK: [[cppObjectaddr:%cppObject.addr]] = alloca ptr, align 8
|
||||
// CHECK: store ptr [[cppObject:%.*]], ptr [[cppObjectaddr]], align 8
|
||||
// CHECK: [[THREE:%.*]] = load ptr, ptr [[cppObjectaddr]], align 8
|
||||
// CHECK: call void @objc_copyStruct(ptr noundef [[TWO:%.*]], ptr noundef [[THREE]], i64 noundef 256, i1 noundef zeroext true, i1 noundef zeroext false)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers %s -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - | FileCheck %s
|
||||
// rdar://10188258
|
||||
|
||||
struct Foo {int i;};
|
||||
@ -24,12 +24,10 @@ static Foo gFoo;
|
||||
- (void)setFooProperty : (Foo &) arg { };
|
||||
@end
|
||||
|
||||
// CHECK: [[T0:%.*]] = load {{%.*}} [[S0:%.*]]
|
||||
// CHECK: [[T2:%.*]] = bitcast {{%.*}} [[T0]] to i8*
|
||||
// CHECK: load i8*, i8** @OBJC_SELECTOR_REFERENCES_
|
||||
// CHECK: [[T0:%.*]] = load {{.*}} [[S0:%.*]]
|
||||
// CHECK: load ptr, ptr @OBJC_SELECTOR_REFERENCES_
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: [[R0:%.*]] = load {{%.*}} [[U0:%.*]]
|
||||
// CHECK: [[R2:%.*]] = bitcast {{%.*}} [[R0]] to i8*
|
||||
// CHECK: load i8*, i8** @OBJC_SELECTOR_REFERENCES_
|
||||
// CHECK: [[R0:%.*]] = load {{.*}} [[U0:%.*]]
|
||||
// CHECK: load ptr, ptr @OBJC_SELECTOR_REFERENCES_
|
||||
// CHECK: @objc_msgSend
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers %s -triple=x86_64-apple-darwin10 -std=c++11 -emit-llvm -debug-info-kind=limited -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -std=c++11 -emit-llvm -debug-info-kind=limited -o - | FileCheck %s
|
||||
|
||||
class S {
|
||||
public:
|
||||
@ -32,7 +32,7 @@ struct CGRect {
|
||||
@synthesize frame;
|
||||
|
||||
// CHECK: define internal void @"\01-[I setPosition:]"
|
||||
// CHECK: call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %class.S* @_ZN1SaSERKS_
|
||||
// CHECK: call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN1SaSERKS_
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
// Don't attach debug locations to the prologue instructions. These were
|
||||
@ -60,8 +60,8 @@ struct CGRect {
|
||||
@end
|
||||
|
||||
// CHECK-LABEL: define{{.*}} i32 @main
|
||||
// CHECK: call void @_ZN1SC1ERKS_(%class.S* {{[^,]*}} [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) {{%[a-zA-Z0-9\.]+}})
|
||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %class.S*)*)(i8* noundef {{%[a-zA-Z0-9\.]+}}, i8* noundef {{%[a-zA-Z0-9\.]+}}, %class.S* noundef [[AGGTMP]])
|
||||
// CHECK: call void @_ZN1SC1ERKS_(ptr {{[^,]*}} [[AGGTMP:%[a-zA-Z0-9\.]+]], ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) {{%[a-zA-Z0-9\.]+}})
|
||||
// CHECK: call void @objc_msgSend(ptr noundef {{%[a-zA-Z0-9\.]+}}, ptr noundef {{%[a-zA-Z0-9\.]+}}, ptr noundef [[AGGTMP]])
|
||||
// CHECK-NEXT: ret i32 0
|
||||
int main() {
|
||||
I *i;
|
||||
@ -72,9 +72,9 @@ int main() {
|
||||
|
||||
// rdar://8379892
|
||||
// CHECK-LABEL: define{{.*}} void @_Z1fP1A
|
||||
// CHECK: call void @_ZN1XC1Ev(%struct.X* {{[^,]*}} [[LVTEMP:%[a-zA-Z0-9\.]+]])
|
||||
// CHECK: call void @_ZN1XC1ERKS_(%struct.X* {{[^,]*}} [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[LVTEMP]])
|
||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.X*)*)({{.*}} %struct.X* noundef [[AGGTMP]])
|
||||
// CHECK: call void @_ZN1XC1Ev(ptr {{[^,]*}} [[LVTEMP:%[a-zA-Z0-9\.]+]])
|
||||
// CHECK: call void @_ZN1XC1ERKS_(ptr {{[^,]*}} [[AGGTMP:%[a-zA-Z0-9\.]+]], ptr noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[LVTEMP]])
|
||||
// CHECK: call void @objc_msgSend({{.*}} ptr noundef [[AGGTMP]])
|
||||
struct X {
|
||||
X();
|
||||
X(const X&);
|
||||
@ -116,32 +116,32 @@ void testB0(B *b) {
|
||||
void testB1(B *b) {
|
||||
b.b1 += { b_makeInt() };
|
||||
}
|
||||
// CHECK: define{{.*}} void @_Z6testB0P1B([[B:%.*]]*
|
||||
// CHECK: [[BVAR:%.*]] = alloca [[B]]*, align 8
|
||||
// CHECK: define{{.*}} void @_Z6testB0P1B(ptr
|
||||
// CHECK: [[BVAR:%.*]] = alloca ptr, align 8
|
||||
// CHECK: [[TEMP:%.*]] = alloca [[B0:%.*]], align 8
|
||||
// CHECK: [[X:%.*]] = getelementptr inbounds [[B0]], [[B0]]* [[TEMP]], i32 0, i32 0
|
||||
// CHECK: [[X:%.*]] = getelementptr inbounds [[B0]], ptr [[TEMP]], i32 0, i32 0
|
||||
// CHECK-NEXT: [[T0:%.*]] = call noundef i32 @_Z9b_makeIntv()
|
||||
// CHECK-NEXT: [[T1:%.*]] = sext i32 [[T0]] to i64
|
||||
// CHECK-NEXT: store i64 [[T1]], i64* [[X]], align 8
|
||||
// CHECK: load [[B]]*, [[B]]** [[BVAR]]
|
||||
// CHECK-NEXT: store i64 [[T1]], ptr [[X]], align 8
|
||||
// CHECK: load ptr, ptr [[BVAR]]
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void @llvm.memcpy
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void bitcast {{.*}} @objc_msgSend
|
||||
// CHECK: call void @objc_msgSend
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret void
|
||||
|
||||
// CHECK: define{{.*}} void @_Z6testB1P1B([[B]]*
|
||||
// CHECK: [[BVAR:%.*]] = alloca [[B]]*, align 8
|
||||
// CHECK: load [[B]]*, [[B]]** [[BVAR]]
|
||||
// CHECK: define{{.*}} void @_Z6testB1P1B(ptr
|
||||
// CHECK: [[BVAR:%.*]] = alloca ptr, align 8
|
||||
// CHECK: load ptr, ptr [[BVAR]]
|
||||
// CHECK-NOT: call
|
||||
// CHECK: [[T0:%.*]] = call i64 bitcast {{.*}} @objc_msgSend
|
||||
// CHECK: [[T0:%.*]] = call i64 @objc_msgSend
|
||||
// CHECK-NOT: call
|
||||
// CHECK: store i64 [[T0]],
|
||||
// CHECK-NOT: call
|
||||
// CHECK: [[T0:%.*]] = call noundef i32 @_Z9b_makeIntv()
|
||||
// CHECK-NEXT: [[T1:%.*]] = sext i32 [[T0]] to i64
|
||||
// CHECK-NEXT: store i64 [[T1]], i64* {{.*}}, align 8
|
||||
// CHECK-NEXT: store i64 [[T1]], ptr {{.*}}, align 8
|
||||
// CHECK-NOT: call
|
||||
// CHECK: [[T0:%.*]] = call i64 @_Zpl2B1S_
|
||||
// CHECK-NOT: call
|
||||
@ -149,7 +149,7 @@ void testB1(B *b) {
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void @llvm.memcpy
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void bitcast {{.*}} @objc_msgSend
|
||||
// CHECK: call void @objc_msgSend
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret void
|
||||
|
||||
@ -159,18 +159,18 @@ void testB2(B *b) {
|
||||
b.b2 = { B3() };
|
||||
}
|
||||
|
||||
// CHECK: define{{.*}} void @_Z6testB2P1B([[B]]*
|
||||
// CHECK: [[BVAR:%.*]] = alloca [[B]]*, align 8
|
||||
// CHECK: define{{.*}} void @_Z6testB2P1B(ptr
|
||||
// CHECK: [[BVAR:%.*]] = alloca ptr, align 8
|
||||
// CHECK: call void @llvm.dbg.declare(
|
||||
// CHECK: call void @_ZN2B3C1Ev(
|
||||
// CHECK-NEXT: [[T0:%.*]] = call i64 @_ZN2B3cv2B1Ev(
|
||||
// CHECK-NOT: call
|
||||
// CHECK: store i64 [[T0]],
|
||||
// CHECK: load [[B]]*, [[B]]** [[BVAR]]
|
||||
// CHECK: load ptr, ptr [[BVAR]]
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void @llvm.memcpy
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void bitcast {{.*}} @objc_msgSend
|
||||
// CHECK: call void @objc_msgSend
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret void
|
||||
|
||||
@ -191,24 +191,24 @@ void testC0(C *c) {
|
||||
c.c0 = c_helper;
|
||||
c.c0 = &c_helper;
|
||||
}
|
||||
// CHECK: define{{.*}} void @_Z6testC0P1C([[C:%.*]]*
|
||||
// CHECK: [[CVAR:%.*]] = alloca [[C]]*, align 8
|
||||
// CHECK: load [[C]]*, [[C]]** [[CVAR]]
|
||||
// CHECK: define{{.*}} void @_Z6testC0P1C(ptr
|
||||
// CHECK: [[CVAR:%.*]] = alloca ptr, align 8
|
||||
// CHECK: load ptr, ptr [[CVAR]]
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void bitcast {{.*}} @objc_msgSend {{.*}} @_Z8c_helperv
|
||||
// CHECK: call void @objc_msgSend({{.*}} @_Z8c_helperv
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void bitcast {{.*}} @objc_msgSend {{.*}} @_Z8c_helperv
|
||||
// CHECK: call void @objc_msgSend({{.*}} @_Z8c_helperv
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret void
|
||||
|
||||
void testC1(C *c) {
|
||||
c.c1 += c_helper;
|
||||
}
|
||||
// CHECK: define{{.*}} void @_Z6testC1P1C([[C]]*
|
||||
// CHECK: [[CVAR:%.*]] = alloca [[C]]*, align 8
|
||||
// CHECK: load [[C]]*, [[C]]** [[CVAR]]
|
||||
// CHECK: define{{.*}} void @_Z6testC1P1C(ptr
|
||||
// CHECK: [[CVAR:%.*]] = alloca ptr, align 8
|
||||
// CHECK: load ptr, ptr [[CVAR]]
|
||||
// CHECK-NOT: call
|
||||
// CHECK: [[T0:%.*]] = call i32 bitcast {{.*}} @objc_msgSend
|
||||
// CHECK: [[T0:%.*]] = call i32 @objc_msgSend
|
||||
// CHECK-NOT: call
|
||||
// CHECK: store i32 [[T0]],
|
||||
// CHECK-NOT: call
|
||||
@ -218,6 +218,6 @@ void testC1(C *c) {
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void @llvm.memcpy
|
||||
// CHECK-NOT: call
|
||||
// CHECK: call void bitcast {{.*}} @objc_msgSend
|
||||
// CHECK: call void @objc_msgSend
|
||||
// CHECK-NOT: call
|
||||
// CHECK: ret void
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
// RUN: %clang_cc1 -no-opaque-pointers %s -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - | FileCheck %s
|
||||
// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - | FileCheck %s
|
||||
// rdar://9208606
|
||||
|
||||
struct MyStruct {
|
||||
@ -26,8 +26,8 @@ void test0() {
|
||||
const MyStruct& currentMyStruct = myClass.foo;
|
||||
}
|
||||
|
||||
// CHECK: [[C:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %struct.MyStruct* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||
// CHECK: store %struct.MyStruct* [[C]], %struct.MyStruct** [[D:%.*]]
|
||||
// CHECK: [[C:%.*]] = call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @objc_msgSend
|
||||
// CHECK: store ptr [[C]], ptr [[D:%.*]]
|
||||
|
||||
namespace test1 {
|
||||
struct A { A(); A(const A&); A&operator=(const A&); ~A(); };
|
||||
@ -40,16 +40,14 @@ namespace test1 {
|
||||
@implementation Test1
|
||||
@synthesize prop1 = ivar;
|
||||
@end
|
||||
// CHECK: define internal noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[A:%.*]]* @"\01-[Test1 prop1]"(
|
||||
// CHECK: [[SELF:%.*]] = alloca [[TEST1:%.*]]*, align 8
|
||||
// CHECK: [[T0:%.*]] = load [[TEST1]]*, [[TEST1]]** [[SELF]]
|
||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST1]]* [[T0]] to i8*
|
||||
// CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds i8, i8* [[T1]], i64 0
|
||||
// CHECK-NEXT: [[T3:%.*]] = bitcast i8* [[T2]] to [[A]]*
|
||||
// CHECK-NEXT: ret [[A]]* [[T3]]
|
||||
// CHECK: define internal noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @"\01-[Test1 prop1]"(
|
||||
// CHECK: [[SELF:%.*]] = alloca ptr, align 8
|
||||
// CHECK: [[T0:%.*]] = load ptr, ptr [[SELF]]
|
||||
// CHECK-NEXT: [[T2:%.*]] = getelementptr inbounds i8, ptr [[T0]], i64 0
|
||||
// CHECK-NEXT: ret ptr [[T2]]
|
||||
|
||||
// CHECK: define internal void @"\01-[Test1 setProp1:]"(
|
||||
// CHECK: call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) [[A]]* @_ZN5test11AaSERKS0_(
|
||||
// CHECK: call noundef nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) ptr @_ZN5test11AaSERKS0_(
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
// rdar://problem/10497174
|
||||
@ -67,11 +65,11 @@ template void test2<int>(Test2*);
|
||||
// CHECK-LABEL: define weak_odr void @_Z5test2IiEvP5Test2(
|
||||
// CHECK: [[X:%.*]] = alloca i32,
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: store i32 {{%.*}}, i32* [[X]],
|
||||
// CHECK: load i32, i32* [[X]],
|
||||
// CHECK: store i32 {{%.*}}, ptr [[X]],
|
||||
// CHECK: load i32, ptr [[X]],
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: load i32, i32* [[X]],
|
||||
// CHECK: load i32, ptr [[X]],
|
||||
// CHECK-NEXT: add nsw
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK-NEXT: ret void
|
||||
@ -86,11 +84,11 @@ template void test3<int>(Test2*);
|
||||
// CHECK-LABEL: define weak_odr void @_Z5test3IiEvP5Test2(
|
||||
// CHECK: [[X:%.*]] = alloca i32,
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: store i32 {{%.*}}, i32* [[X]],
|
||||
// CHECK: load i32, i32* [[X]],
|
||||
// CHECK: store i32 {{%.*}}, ptr [[X]],
|
||||
// CHECK: load i32, ptr [[X]],
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK: load i32, i32* [[X]],
|
||||
// CHECK: load i32, ptr [[X]],
|
||||
// CHECK-NEXT: add nsw
|
||||
// CHECK: @objc_msgSend
|
||||
// CHECK-NEXT: ret void
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user