forked from OSchip/llvm-project
Mark C++ reference parameters as dereferenceable
Because references must be initialized using some evaluated expression, they must point to something, and a callee can assume the reference parameter is dereferenceable. Taking advantage of a new attribute just added to LLVM, mark them as such. Because dereferenceability in addrspace(0) implies nonnull in the backend, we don't need both attributes. However, we need to know the size of the object to use the dereferenceable attribute, so for incomplete types we still emit only nonnull. llvm-svn: 213386
This commit is contained in:
parent
b0407ba071
commit
a2347baaec
|
@ -1202,8 +1202,14 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
|
||||||
llvm_unreachable("Invalid ABI kind for return argument");
|
llvm_unreachable("Invalid ABI kind for return argument");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RetTy->isReferenceType())
|
if (const auto *RefTy = RetTy->getAs<ReferenceType>()) {
|
||||||
|
QualType PTy = RefTy->getPointeeType();
|
||||||
|
if (!PTy->isIncompleteType() && PTy->isConstantSizeType())
|
||||||
|
RetAttrs.addDereferenceableAttr(getContext().getTypeSizeInChars(PTy)
|
||||||
|
.getQuantity());
|
||||||
|
else if (getContext().getTargetAddressSpace(PTy) == 0)
|
||||||
RetAttrs.addAttribute(llvm::Attribute::NonNull);
|
RetAttrs.addAttribute(llvm::Attribute::NonNull);
|
||||||
|
}
|
||||||
|
|
||||||
if (RetAttrs.hasAttributes())
|
if (RetAttrs.hasAttributes())
|
||||||
PAL.push_back(llvm::
|
PAL.push_back(llvm::
|
||||||
|
@ -1293,8 +1299,14 @@ void CodeGenModule::ConstructAttributeList(const CGFunctionInfo &FI,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ParamType->isReferenceType())
|
if (const auto *RefTy = ParamType->getAs<ReferenceType>()) {
|
||||||
|
QualType PTy = RefTy->getPointeeType();
|
||||||
|
if (!PTy->isIncompleteType() && PTy->isConstantSizeType())
|
||||||
|
Attrs.addDereferenceableAttr(getContext().getTypeSizeInChars(PTy)
|
||||||
|
.getQuantity());
|
||||||
|
else if (getContext().getTargetAddressSpace(PTy) == 0)
|
||||||
Attrs.addAttribute(llvm::Attribute::NonNull);
|
Attrs.addAttribute(llvm::Attribute::NonNull);
|
||||||
|
}
|
||||||
|
|
||||||
if (Attrs.hasAttributes())
|
if (Attrs.hasAttributes())
|
||||||
PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index, Attrs));
|
PAL.push_back(llvm::AttributeSet::get(getLLVMContext(), Index, Attrs));
|
||||||
|
|
|
@ -26,12 +26,12 @@ struct X4 {
|
||||||
struct X5 : X0, X4 { };
|
struct X5 : X0, X4 { };
|
||||||
|
|
||||||
void test(X2 x2, X3 x3, X5 x5) {
|
void test(X2 x2, X3 x3, X5 x5) {
|
||||||
// CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2* %this, %struct.X2* nonnull) unnamed_addr
|
// CHECK: define linkonce_odr void @_ZN2X2C1ERKS_(%struct.X2* %this, %struct.X2* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
// CHECK: call void @_ZN2X2C2ERKS_({{.*}}) [[NUW:#[0-9]+]]
|
// CHECK: call void @_ZN2X2C2ERKS_({{.*}}) [[NUW:#[0-9]+]]
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
X2 x2a(x2);
|
X2 x2a(x2);
|
||||||
// CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3* %this, %struct.X3* nonnull) unnamed_addr
|
// CHECK: define linkonce_odr void @_ZN2X3C1ERKS_(%struct.X3* %this, %struct.X3* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
// CHECK: call void @_ZN2X3C2ERKS_({{.*}}) [[NUW]]
|
// CHECK: call void @_ZN2X3C2ERKS_({{.*}}) [[NUW]]
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
// RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
||||||
|
|
||||||
|
// For a reference to a complete type, output the dereferenceable attribute (in
|
||||||
|
// any address space).
|
||||||
|
|
||||||
|
typedef int a __attribute__((address_space(1)));
|
||||||
|
|
||||||
|
a & foo(a &x, a & y) {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: define dereferenceable(4) i32 addrspace(1)* @_Z3fooRU3AS1iS0_(i32 addrspace(1)* dereferenceable(4) %x, i32 addrspace(1)* dereferenceable(4) %y)
|
||||||
|
|
||||||
|
// For a reference to an incomplete type in an alternate address space, output
|
||||||
|
// neither dereferenceable nor nonnull.
|
||||||
|
|
||||||
|
class bc;
|
||||||
|
typedef bc b __attribute__((address_space(1)));
|
||||||
|
|
||||||
|
b & bar(b &x, b & y) {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: define %class.bc addrspace(1)* @_Z3barRU3AS12bcS1_(%class.bc addrspace(1)* %x, %class.bc addrspace(1)* %y)
|
||||||
|
|
||||||
|
// For a reference to an incomplete type in addrspace(0), output nonnull.
|
||||||
|
|
||||||
|
bc & bar2(bc &x, bc & y) {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK: define nonnull %class.bc* @_Z4bar2R2bcS0_(%class.bc* nonnull %x, %class.bc* nonnull %y)
|
||||||
|
|
||||||
|
|
|
@ -106,7 +106,7 @@ namespace test_block_in_lambda {
|
||||||
// CHECK: [[TO_DESTROY:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
// CHECK: [[TO_DESTROY:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||||
// CHECK: [[T0:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
// CHECK: [[T0:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||||
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[LAMBDA_T]]* [[THIS]], i32 0, i32 0
|
// CHECK-NEXT: [[T1:%.*]] = getelementptr inbounds [[LAMBDA_T]]* [[THIS]], i32 0, i32 0
|
||||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AC1ERKS0_({{.*}}* [[T0]], {{.*}}* nonnull [[T1]])
|
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AC1ERKS0_({{.*}}* [[T0]], {{.*}}* dereferenceable({{[0-9]+}}) [[T1]])
|
||||||
// CHECK-NEXT: [[T0:%.*]] = bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
|
// CHECK-NEXT: [[T0:%.*]] = bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
|
||||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda9takeBlockEU13block_pointerFvvE(void ()* [[T0]])
|
// CHECK-NEXT: call void @_ZN20test_block_in_lambda9takeBlockEU13block_pointerFvvE(void ()* [[T0]])
|
||||||
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AD1Ev({{.*}}* [[TO_DESTROY]])
|
// CHECK-NEXT: call void @_ZN20test_block_in_lambda1AD1Ev({{.*}}* [[TO_DESTROY]])
|
||||||
|
|
|
@ -164,7 +164,7 @@ namespace test5 {
|
||||||
|
|
||||||
// CHECK-NOT: br
|
// CHECK-NOT: br
|
||||||
// CHECK: [[CAPTURE:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
// CHECK: [[CAPTURE:%.*]] = getelementptr inbounds [[BLOCK_T]]* [[BLOCK]], i32 0, i32 5
|
||||||
// CHECK-NEXT: call void @_ZN5test51AC1ERKS0_([[A]]* [[CAPTURE]], [[A]]* nonnull [[X]])
|
// CHECK-NEXT: call void @_ZN5test51AC1ERKS0_([[A]]* [[CAPTURE]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||||
// CHECK-NEXT: store i1 true, i1* [[CLEANUP_ACTIVE]]
|
// CHECK-NEXT: store i1 true, i1* [[CLEANUP_ACTIVE]]
|
||||||
// CHECK-NEXT: bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
|
// CHECK-NEXT: bitcast [[BLOCK_T]]* [[BLOCK]] to void ()*
|
||||||
// CHECK-NEXT: br label
|
// CHECK-NEXT: br label
|
||||||
|
|
|
@ -357,7 +357,7 @@ void downcast_pointer(B *b) {
|
||||||
// CHECK-NEXT: br i1 [[AND]]
|
// CHECK-NEXT: br i1 [[AND]]
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define void @_Z18downcast_referenceR1B(%class.B* nonnull %b)
|
// CHECK-LABEL: define void @_Z18downcast_referenceR1B(%class.B* dereferenceable({{[0-9]+}}) %b)
|
||||||
void downcast_reference(B &b) {
|
void downcast_reference(B &b) {
|
||||||
(void) static_cast<C&>(b);
|
(void) static_cast<C&>(b);
|
||||||
// Alignment check from EmitTypeCheck(TCK_DowncastReference, ...)
|
// Alignment check from EmitTypeCheck(TCK_DowncastReference, ...)
|
||||||
|
|
|
@ -83,7 +83,7 @@ namespace test3 {
|
||||||
// CHECK-NEXT: [[T0:%.*]] = load [[B]]** [[X]]
|
// CHECK-NEXT: [[T0:%.*]] = load [[B]]** [[X]]
|
||||||
// CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1 @_ZN5test31BcvbEv([[B]]* [[T0]])
|
// CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1 @_ZN5test31BcvbEv([[B]]* [[T0]])
|
||||||
// CHECK-NEXT: br i1 [[BOOL]]
|
// CHECK-NEXT: br i1 [[BOOL]]
|
||||||
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* [[RESULT:%.*]], [[B]]* nonnull [[T0]])
|
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[T0]])
|
||||||
// CHECK-NEXT: br label
|
// CHECK-NEXT: br label
|
||||||
// CHECK: call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
|
// CHECK: call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
|
||||||
// CHECK-NEXT: br label
|
// CHECK-NEXT: br label
|
||||||
|
@ -97,7 +97,7 @@ namespace test3 {
|
||||||
// CHECK-NEXT: call void @_ZN5test312test1_helperEv([[B]]* sret [[TEMP]])
|
// CHECK-NEXT: call void @_ZN5test312test1_helperEv([[B]]* sret [[TEMP]])
|
||||||
// CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1 @_ZN5test31BcvbEv([[B]]* [[TEMP]])
|
// CHECK-NEXT: [[BOOL:%.*]] = call zeroext i1 @_ZN5test31BcvbEv([[B]]* [[TEMP]])
|
||||||
// CHECK-NEXT: br i1 [[BOOL]]
|
// CHECK-NEXT: br i1 [[BOOL]]
|
||||||
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* [[RESULT:%.*]], [[B]]* nonnull [[TEMP]])
|
// CHECK: call void @_ZN5test31BC1ERKS0_([[B]]* [[RESULT:%.*]], [[B]]* dereferenceable({{[0-9]+}}) [[TEMP]])
|
||||||
// CHECK-NEXT: br label
|
// CHECK-NEXT: br label
|
||||||
// CHECK: call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
|
// CHECK: call void @_ZN5test31BC1Ev([[B]]* [[RESULT]])
|
||||||
// CHECK-NEXT: br label
|
// CHECK-NEXT: br label
|
||||||
|
|
|
@ -532,10 +532,10 @@ namespace InitFromConst {
|
||||||
// CHECK: call void @_ZN13InitFromConst7consumeIdEEvT_(double 4.300000e+00)
|
// CHECK: call void @_ZN13InitFromConst7consumeIdEEvT_(double 4.300000e+00)
|
||||||
consume(d);
|
consume(d);
|
||||||
|
|
||||||
// CHECK: call void @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"* nonnull @_ZN13InitFromConstL1sE)
|
// CHECK: call void @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"* dereferenceable({{[0-9]+}}) @_ZN13InitFromConstL1sE)
|
||||||
consume<const S&>(s);
|
consume<const S&>(s);
|
||||||
|
|
||||||
// CHECK: call void @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"* nonnull @_ZN13InitFromConstL1sE)
|
// CHECK: call void @_ZN13InitFromConst7consumeIRKNS_1SEEEvT_(%"struct.InitFromConst::S"* dereferenceable({{[0-9]+}}) @_ZN13InitFromConstL1sE)
|
||||||
consume<const S&>(r);
|
consume<const S&>(r);
|
||||||
|
|
||||||
// CHECK: call void @_ZN13InitFromConst7consumeIPKNS_1SEEEvT_(%"struct.InitFromConst::S"* @_ZN13InitFromConstL1sE)
|
// CHECK: call void @_ZN13InitFromConst7consumeIPKNS_1SEEEvT_(%"struct.InitFromConst::S"* @_ZN13InitFromConstL1sE)
|
||||||
|
|
|
@ -54,6 +54,6 @@ void f3() {
|
||||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* %var)
|
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1Ev(%class.Test3* %var)
|
||||||
var.Test3::Test3();
|
var.Test3::Test3();
|
||||||
|
|
||||||
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1ERKS_(%class.Test3* %var, %class.Test3* nonnull %var2)
|
// CHECK-NEXT: call x86_thiscallcc void @_ZN5Test3C1ERKS_(%class.Test3* %var, %class.Test3* dereferenceable({{[0-9]+}}) %var2)
|
||||||
var.Test3::Test3(var2);
|
var.Test3::Test3(var2);
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,7 +163,7 @@ template<typename T> struct X;
|
||||||
|
|
||||||
// Make sure that the instantiated constructor initializes start and
|
// Make sure that the instantiated constructor initializes start and
|
||||||
// end properly.
|
// end properly.
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XIiEC2ERKS0_(%struct.X* %this, %struct.X* nonnull %other) unnamed_addr
|
// CHECK-LABEL: define linkonce_odr void @_ZN1XIiEC2ERKS0_(%struct.X* %this, %struct.X* dereferenceable({{[0-9]+}}) %other) unnamed_addr
|
||||||
// CHECK: {{store.*null}}
|
// CHECK: {{store.*null}}
|
||||||
// CHECK: {{store.*null}}
|
// CHECK: {{store.*null}}
|
||||||
// CHECK: ret
|
// CHECK: ret
|
||||||
|
|
|
@ -39,4 +39,4 @@ int main()
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: call i32 (i32)* (%struct.A*)* @_ZN1AcvPFiiEEv
|
// CHECK: call i32 (i32)* (%struct.A*)* @_ZN1AcvPFiiEEv
|
||||||
// CHECK: call nonnull i32 (i32)* (%struct.B*)* @_ZN1BcvRFiiEEv
|
// CHECK: call i32 (i32)* (%struct.B*)* @_ZN1BcvRFiiEEv
|
||||||
|
|
|
@ -92,4 +92,4 @@ int main() {
|
||||||
dstY.pr();
|
dstY.pr();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: define linkonce_odr nonnull %struct.X* @_ZN1XaSERKS_
|
// CHECK: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.X* @_ZN1XaSERKS_
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace no_elide_base {
|
||||||
Derived(const Other &O);
|
Derived(const Other &O);
|
||||||
};
|
};
|
||||||
|
|
||||||
// CHECK: define {{.*}} @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE(%"struct.no_elide_base::Derived"* returned %this, %"struct.no_elide_base::Other"* nonnull %O) unnamed_addr
|
// CHECK: define {{.*}} @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE(%"struct.no_elide_base::Derived"* returned %this, %"struct.no_elide_base::Other"* dereferenceable({{[0-9]+}}) %O) unnamed_addr
|
||||||
Derived::Derived(const Other &O)
|
Derived::Derived(const Other &O)
|
||||||
// CHECK: call {{.*}} @_ZNK13no_elide_base5OthercvNS_4BaseEEv
|
// CHECK: call {{.*}} @_ZNK13no_elide_base5OthercvNS_4BaseEEv
|
||||||
// CHECK: call {{.*}} @_ZN13no_elide_base4BaseC2ERKS0_
|
// CHECK: call {{.*}} @_ZN13no_elide_base4BaseC2ERKS0_
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
struct A { virtual void a(); };
|
struct A { virtual void a(); };
|
||||||
A x(A& y) { return y; }
|
A x(A& y) { return y; }
|
||||||
|
|
||||||
// CHECK: define linkonce_odr {{.*}} @_ZN1AC1ERKS_(%struct.A* {{.*}}%this, %struct.A* nonnull) unnamed_addr
|
// CHECK: define linkonce_odr {{.*}} @_ZN1AC1ERKS_(%struct.A* {{.*}}%this, %struct.A* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
// CHECK: store i8** getelementptr inbounds ([3 x i8*]* @_ZTV1A, i64 0, i64 2)
|
// CHECK: store i8** getelementptr inbounds ([3 x i8*]* @_ZTV1A, i64 0, i64 2)
|
||||||
|
|
|
@ -21,7 +21,7 @@ struct P {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN1XC1ERKS_(%struct.X* %this, %struct.X* nonnull) unnamed_addr
|
// CHECK-LABEL: define linkonce_odr void @_ZN1XC1ERKS_(%struct.X* %this, %struct.X* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
struct X : M, N, P { // ...
|
struct X : M, N, P { // ...
|
||||||
X() : f1(1.0), d1(2.0), i1(3), name("HELLO"), bf1(0xff), bf2(0xabcd),
|
X() : f1(1.0), d1(2.0), i1(3), name("HELLO"), bf1(0xff), bf2(0xabcd),
|
||||||
au_i1(1234), au1_4("MASKED") {}
|
au_i1(1234), au1_4("MASKED") {}
|
||||||
|
@ -136,7 +136,7 @@ void f(B b1) {
|
||||||
B b2 = b1;
|
B b2 = b1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: define linkonce_odr nonnull [[A:%.*]]* @_ZN12rdar138169401AaSERKS0_(
|
// CHECK: define linkonce_odr dereferenceable({{[0-9]+}}) [[A:%.*]]* @_ZN12rdar138169401AaSERKS0_(
|
||||||
// CHECK: [[THIS:%.*]] = load [[A]]**
|
// CHECK: [[THIS:%.*]] = load [[A]]**
|
||||||
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[A]]* [[THIS]], i32 0, i32 1
|
// CHECK-NEXT: [[T0:%.*]] = getelementptr inbounds [[A]]* [[THIS]], i32 0, i32 1
|
||||||
// CHECK-NEXT: [[OTHER:%.*]] = load [[A]]**
|
// CHECK-NEXT: [[OTHER:%.*]] = load [[A]]**
|
||||||
|
@ -158,7 +158,7 @@ void f(B b1) {
|
||||||
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[T4]], i8* [[T5]], i64 8, i32 8, i1 false)
|
// CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[T4]], i8* [[T5]], i64 8, i32 8, i1 false)
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN6PR66281BC2ERKS0_(%"struct.PR6628::B"* %this, %"struct.PR6628::B"* nonnull) unnamed_addr
|
// CHECK-LABEL: define linkonce_odr void @_ZN6PR66281BC2ERKS0_(%"struct.PR6628::B"* %this, %"struct.PR6628::B"* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
// CHECK: call void @_ZN6PR66281TC1Ev
|
// CHECK: call void @_ZN6PR66281TC1Ev
|
||||||
// CHECK: call void @_ZN6PR66281TC1Ev
|
// CHECK: call void @_ZN6PR66281TC1Ev
|
||||||
// CHECK: call void @_ZN6PR66281AC2ERKS0_RKNS_1TES5_
|
// CHECK: call void @_ZN6PR66281AC2ERKS0_RKNS_1TES5_
|
||||||
|
|
|
@ -20,7 +20,7 @@ int &fn2(int &v) {
|
||||||
// CHECK: %[[INITLIST2:.*]] = alloca %struct.B, align 8
|
// CHECK: %[[INITLIST2:.*]] = alloca %struct.B, align 8
|
||||||
// CHECK: %[[R:.*]] = getelementptr inbounds %struct.B* %[[INITLIST2:.*]], i32 0, i32 0
|
// CHECK: %[[R:.*]] = getelementptr inbounds %struct.B* %[[INITLIST2:.*]], i32 0, i32 0
|
||||||
// CHECK: store i32* %{{.*}}, i32** %[[R]], align 8
|
// CHECK: store i32* %{{.*}}, i32** %[[R]], align 8
|
||||||
// CHECK: call nonnull i32* @_ZN1B1fEv(%struct.B* %[[INITLIST2:.*]])
|
// CHECK: call dereferenceable({{[0-9]+}}) i32* @_ZN1B1fEv(%struct.B* %[[INITLIST2:.*]])
|
||||||
return B{v}.f();
|
return B{v}.f();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,10 @@ thread_local int &r = f();
|
||||||
int &g() { return r; }
|
int &g() { return r; }
|
||||||
|
|
||||||
// CHECK: define {{.*}} @[[R_INIT:.*]]()
|
// CHECK: define {{.*}} @[[R_INIT:.*]]()
|
||||||
// CHECK: call nonnull i32* @_Z1fv()
|
// CHECK: call dereferenceable({{[0-9]+}}) i32* @_Z1fv()
|
||||||
// CHECK: store i32* %{{.*}}, i32** @r, align 8
|
// CHECK: store i32* %{{.*}}, i32** @r, align 8
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i32* @_Z1gv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z1gv()
|
||||||
// CHECK: call i32* @_ZTW1r()
|
// CHECK: call i32* @_ZTW1r()
|
||||||
// CHECK: ret i32* %{{.*}}
|
// CHECK: ret i32* %{{.*}}
|
||||||
|
|
||||||
|
|
|
@ -23,5 +23,5 @@ int main() {
|
||||||
const A& rca2 = d();
|
const A& rca2 = d();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: call nonnull %struct.A* @_ZN1BcvR1AEv
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.A* @_ZN1BcvR1AEv
|
||||||
// CHECK: call nonnull %struct.A* @_ZN1BcvR1AEv
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.A* @_ZN1BcvR1AEv
|
||||||
|
|
|
@ -16,12 +16,12 @@ public:
|
||||||
// CHECK-LABEL: define void @_Z1gv()
|
// CHECK-LABEL: define void @_Z1gv()
|
||||||
void g() {
|
void g() {
|
||||||
// CHECK: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG1:%.*]])
|
// CHECK: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG1:%.*]])
|
||||||
// CHECK-NEXT: call void @_Z1fRK1T([[T]]* nonnull [[AGG1]])
|
// CHECK-NEXT: call void @_Z1fRK1T([[T]]* dereferenceable({{[0-9]+}}) [[AGG1]])
|
||||||
// CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG1]])
|
// CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG1]])
|
||||||
f();
|
f();
|
||||||
|
|
||||||
// CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG2:%.*]])
|
// CHECK-NEXT: call void @_ZN1TC1Ev([[T:%.*]]* [[AGG2:%.*]])
|
||||||
// CHECK-NEXT: call void @_Z1fRK1T([[T]]* nonnull [[AGG2]])
|
// CHECK-NEXT: call void @_Z1fRK1T([[T]]* dereferenceable({{[0-9]+}}) [[AGG2]])
|
||||||
// CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG2]])
|
// CHECK-NEXT: call void @_ZN1TD1Ev([[T]]* [[AGG2]])
|
||||||
f();
|
f();
|
||||||
|
|
||||||
|
|
|
@ -33,9 +33,9 @@ void test0(X x) {
|
||||||
test0_helper(x);
|
test0_helper(x);
|
||||||
// CHECK-LABEL: define void @_Z5test01X(
|
// CHECK-LABEL: define void @_Z5test01X(
|
||||||
// CHECK: [[TMP:%.*]] = alloca [[A:%.*]], align
|
// CHECK: [[TMP:%.*]] = alloca [[A:%.*]], align
|
||||||
// CHECK-NEXT: [[T0:%.*]] = call nonnull [[B:%.*]]* @_ZN1XcvR1BEv(
|
// CHECK-NEXT: [[T0:%.*]] = call dereferenceable({{[0-9]+}}) [[B:%.*]]* @_ZN1XcvR1BEv(
|
||||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[B]]* [[T0]] to [[A]]*
|
// CHECK-NEXT: [[T1:%.*]] = bitcast [[B]]* [[T0]] to [[A]]*
|
||||||
// CHECK-NEXT: call void @_ZN1AC1ERKS_([[A]]* [[TMP]], [[A]]* nonnull [[T1]])
|
// CHECK-NEXT: call void @_ZN1AC1ERKS_([[A]]* [[TMP]], [[A]]* dereferenceable({{[0-9]+}}) [[T1]])
|
||||||
// CHECK-NEXT: call void @_Z12test0_helper1A([[A]]* [[TMP]])
|
// CHECK-NEXT: call void @_Z12test0_helper1A([[A]]* [[TMP]])
|
||||||
// CHECK-NEXT: call void @_ZN1AD1Ev([[A]]* [[TMP]])
|
// CHECK-NEXT: call void @_ZN1AD1Ev([[A]]* [[TMP]])
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|
|
@ -9,7 +9,7 @@ struct D final : virtual C {
|
||||||
virtual void f();
|
virtual void f();
|
||||||
};
|
};
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull %struct.B* @_Z1fR1D
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.B* @_Z1fR1D
|
||||||
B &f(D &d) {
|
B &f(D &d) {
|
||||||
// CHECK-NOT: load i8**
|
// CHECK-NOT: load i8**
|
||||||
return d;
|
return d;
|
||||||
|
|
|
@ -288,32 +288,32 @@ struct ExportSpecials {
|
||||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
// G64-DAG: define dllexport void @_ZN14ExportSpecialsD2Ev(%struct.ExportSpecials* %this)
|
||||||
__declspec(dllexport) ~ExportSpecials();
|
__declspec(dllexport) ~ExportSpecials();
|
||||||
|
|
||||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@ABU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* nonnull)
|
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@ABU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@AEBU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* nonnull)
|
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@AEBU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2ERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllexport) ExportSpecials(const ExportSpecials&);
|
__declspec(dllexport) ExportSpecials(const ExportSpecials&);
|
||||||
|
|
||||||
// M32-DAG: define dllexport x86_thiscallcc nonnull %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define dllexport nonnull %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc nonnull %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport nonnull %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSERKS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllexport) ExportSpecials& operator=(const ExportSpecials&);
|
__declspec(dllexport) ExportSpecials& operator=(const ExportSpecials&);
|
||||||
|
|
||||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* nonnull)
|
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportSpecials* @"\01??0ExportSpecials@@QAE@$$QAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* nonnull)
|
// M64-DAG: define dllexport %struct.ExportSpecials* @"\01??0ExportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ExportSpecials* returned %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC1EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G64-DAG: define dllexport void @_ZN14ExportSpecialsC2EOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllexport) ExportSpecials(ExportSpecials&&);
|
__declspec(dllexport) ExportSpecials(ExportSpecials&&);
|
||||||
|
|
||||||
// M32-DAG: define dllexport x86_thiscallcc nonnull %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define dllexport nonnull %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @"\01??4ExportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc nonnull %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport nonnull %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* nonnull)
|
// G64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportSpecials* @_ZN14ExportSpecialsaSEOS_(%struct.ExportSpecials* %this, %struct.ExportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllexport) ExportSpecials& operator=(ExportSpecials&&);
|
__declspec(dllexport) ExportSpecials& operator=(ExportSpecials&&);
|
||||||
};
|
};
|
||||||
ExportSpecials::ExportSpecials() {}
|
ExportSpecials::ExportSpecials() {}
|
||||||
|
@ -344,10 +344,10 @@ struct ExportInlineSpecials {
|
||||||
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1ERKS_(
|
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1ERKS_(
|
||||||
__declspec(dllexport) inline ExportInlineSpecials(const ExportInlineSpecials&);
|
__declspec(dllexport) inline ExportInlineSpecials(const ExportInlineSpecials&);
|
||||||
|
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
||||||
// M64-DAG: define weak_odr dllexport nonnull %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(
|
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(
|
||||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
// G32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
||||||
// G64-DAG: define weak_odr dllexport nonnull %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
// G64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSERKS_(
|
||||||
__declspec(dllexport) ExportInlineSpecials& operator=(const ExportInlineSpecials&);
|
__declspec(dllexport) ExportInlineSpecials& operator=(const ExportInlineSpecials&);
|
||||||
|
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@$$QAU0@@Z"(
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportInlineSpecials* @"\01??0ExportInlineSpecials@@QAE@$$QAU0@@Z"(
|
||||||
|
@ -356,10 +356,10 @@ struct ExportInlineSpecials {
|
||||||
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1EOS_(
|
// G64-DAG: define weak_odr dllexport void @_ZN20ExportInlineSpecialsC1EOS_(
|
||||||
__declspec(dllexport) ExportInlineSpecials(ExportInlineSpecials&&) {}
|
__declspec(dllexport) ExportInlineSpecials(ExportInlineSpecials&&) {}
|
||||||
|
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
||||||
// M64-DAG: define weak_odr dllexport nonnull %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(
|
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @"\01??4ExportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(
|
||||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
// G32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
||||||
// G64-DAG: define weak_odr dllexport nonnull %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
// G64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportInlineSpecials* @_ZN20ExportInlineSpecialsaSEOS_(
|
||||||
__declspec(dllexport) ExportInlineSpecials& operator=(ExportInlineSpecials&&) { return *this; }
|
__declspec(dllexport) ExportInlineSpecials& operator=(ExportInlineSpecials&&) { return *this; }
|
||||||
};
|
};
|
||||||
ExportInlineSpecials::ExportInlineSpecials(const ExportInlineSpecials&) {}
|
ExportInlineSpecials::ExportInlineSpecials(const ExportInlineSpecials&) {}
|
||||||
|
@ -392,32 +392,32 @@ __declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs() = default;
|
||||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsD2Ev(%struct.ExportDefaultedDefs* %this)
|
||||||
ExportDefaultedDefs::~ExportDefaultedDefs() = default;
|
ExportDefaultedDefs::~ExportDefaultedDefs() = default;
|
||||||
|
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* nonnull)
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define weak_odr dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* nonnull)
|
// M64-DAG: define weak_odr dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define weak_odr dllexport void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G64-DAG: define weak_odr dllexport void @_ZN19ExportDefaultedDefsC1ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G32-DAG: define weak_odr dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define weak_odr dllexport void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G64-DAG: define weak_odr dllexport void @_ZN19ExportDefaultedDefsC2ERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(const ExportDefaultedDefs&) = default;
|
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(const ExportDefaultedDefs&) = default;
|
||||||
|
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define weak_odr dllexport nonnull %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// M64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define weak_odr dllexport nonnull %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G64-DAG: define weak_odr dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSERKS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
inline ExportDefaultedDefs& ExportDefaultedDefs::operator=(const ExportDefaultedDefs&) = default;
|
inline ExportDefaultedDefs& ExportDefaultedDefs::operator=(const ExportDefaultedDefs&) = default;
|
||||||
|
|
||||||
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* nonnull)
|
// M32-DAG: define dllexport x86_thiscallcc %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* nonnull)
|
// M64-DAG: define dllexport %struct.ExportDefaultedDefs* @"\01??0ExportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* returned %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC1EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G64-DAG: define dllexport void @_ZN19ExportDefaultedDefsC2EOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(ExportDefaultedDefs&&) = default;
|
__declspec(dllexport) ExportDefaultedDefs::ExportDefaultedDefs(ExportDefaultedDefs&&) = default;
|
||||||
|
|
||||||
// M32-DAG: define dllexport x86_thiscallcc nonnull %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// M32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define dllexport nonnull %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// M64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @"\01??4ExportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define dllexport x86_thiscallcc nonnull %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G32-DAG: define dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define dllexport nonnull %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* nonnull)
|
// G64-DAG: define dllexport dereferenceable({{[0-9]+}}) %struct.ExportDefaultedDefs* @_ZN19ExportDefaultedDefsaSEOS_(%struct.ExportDefaultedDefs* %this, %struct.ExportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
ExportDefaultedDefs& ExportDefaultedDefs::operator=(ExportDefaultedDefs&&) = default;
|
ExportDefaultedDefs& ExportDefaultedDefs::operator=(ExportDefaultedDefs&&) = default;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -489,7 +489,7 @@ struct S {
|
||||||
|
|
||||||
struct __declspec(dllexport) T {
|
struct __declspec(dllexport) T {
|
||||||
// Copy assignment operator:
|
// Copy assignment operator:
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.T* @"\01??4T@@QAEAAU0@ABU0@@Z"
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0@ABU0@@Z"
|
||||||
|
|
||||||
// Explicitly defaulted copy constructur:
|
// Explicitly defaulted copy constructur:
|
||||||
T(const T&) = default;
|
T(const T&) = default;
|
||||||
|
@ -511,7 +511,7 @@ int T::c;
|
||||||
template <typename T> struct __declspec(dllexport) U { void foo() {} };
|
template <typename T> struct __declspec(dllexport) U { void foo() {} };
|
||||||
// The U<int> specialization below must cause the following to be emitted:
|
// The U<int> specialization below must cause the following to be emitted:
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?foo@?$U@H@@QAEXXZ"
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01?foo@?$U@H@@QAEXXZ"
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.U* @"\01??4?$U@H@@QAEAAU0@ABU0@@Z"
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.U* @"\01??4?$U@H@@QAEAAU0@ABU0@@Z"
|
||||||
struct __declspec(dllexport) V : public U<int> { };
|
struct __declspec(dllexport) V : public U<int> { };
|
||||||
|
|
||||||
|
|
||||||
|
@ -531,7 +531,7 @@ struct __declspec(dllexport) X : public virtual W {};
|
||||||
|
|
||||||
struct __declspec(dllexport) Y {
|
struct __declspec(dllexport) Y {
|
||||||
// Move assignment operator:
|
// Move assignment operator:
|
||||||
// M32-DAG: define weak_odr dllexport x86_thiscallcc nonnull %struct.Y* @"\01??4Y@@QAEAAU0@$$QAU0@@Z"
|
// M32-DAG: define weak_odr dllexport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.Y* @"\01??4Y@@QAEAAU0@$$QAU0@@Z"
|
||||||
|
|
||||||
int x;
|
int x;
|
||||||
};
|
};
|
||||||
|
|
|
@ -420,28 +420,28 @@ struct ImportSpecials {
|
||||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsD1Ev(%struct.ImportSpecials*)
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsD1Ev(%struct.ImportSpecials*)
|
||||||
__declspec(dllimport) ~ImportSpecials();
|
__declspec(dllimport) ~ImportSpecials();
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@ABU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@ABU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@AEBU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@AEBU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1ERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportSpecials(const ImportSpecials&);
|
__declspec(dllimport) ImportSpecials(const ImportSpecials&);
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportSpecials* @"\01??4ImportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportSpecials* @"\01??4ImportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSERKS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportSpecials& operator=(const ImportSpecials&);
|
__declspec(dllimport) ImportSpecials& operator=(const ImportSpecials&);
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportSpecials* @"\01??0ImportSpecials@@QAE@$$QAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportSpecials* @"\01??0ImportSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportSpecials* returned, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G64-DAG: declare dllimport void @_ZN14ImportSpecialsC1EOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportSpecials(ImportSpecials&&);
|
__declspec(dllimport) ImportSpecials(ImportSpecials&&);
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportSpecials* @"\01??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportSpecials* @"\01??4ImportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @"\01??4ImportSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportSpecials* @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportSpecials* @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*, %struct.ImportSpecials* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportSpecials* @_ZN14ImportSpecialsaSEOS_(%struct.ImportSpecials*, %struct.ImportSpecials* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportSpecials& operator=(ImportSpecials&&);
|
__declspec(dllimport) ImportSpecials& operator=(ImportSpecials&&);
|
||||||
};
|
};
|
||||||
USESPECIALS(ImportSpecials)
|
USESPECIALS(ImportSpecials)
|
||||||
|
@ -465,36 +465,36 @@ struct ImportInlineSpecials {
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsD1Ev(
|
||||||
__declspec(dllimport) ~ImportInlineSpecials() {}
|
__declspec(dllimport) ~ImportInlineSpecials() {}
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@AEBU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G64-DAG: declare dllimport void @_ZN20ImportInlineSpecialsC1ERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@ABU0@@Z"(
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1ERKS_(
|
||||||
__declspec(dllimport) inline ImportInlineSpecials(const ImportInlineSpecials&);
|
__declspec(dllimport) inline ImportInlineSpecials(const ImportInlineSpecials&);
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@ABU0@@Z"(
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSERKS_(
|
||||||
__declspec(dllimport) ImportInlineSpecials& operator=(const ImportInlineSpecials&);
|
__declspec(dllimport) ImportInlineSpecials& operator=(const ImportInlineSpecials&);
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QEAA@$$QEAU0@@Z"(%struct.ImportInlineSpecials* returned, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G64-DAG: declare dllimport void @_ZN20ImportInlineSpecialsC1EOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportInlineSpecials* @"\01??0ImportInlineSpecials@@QAE@$$QAU0@@Z"(
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN20ImportInlineSpecialsC1EOS_(
|
||||||
__declspec(dllimport) ImportInlineSpecials(ImportInlineSpecials&&) {}
|
__declspec(dllimport) ImportInlineSpecials(ImportInlineSpecials&&) {}
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(%struct.ImportInlineSpecials*, %struct.ImportInlineSpecials* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @"\01??4ImportInlineSpecials@@QAEAAU0@$$QAU0@@Z"(
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportInlineSpecials* @_ZN20ImportInlineSpecialsaSEOS_(
|
||||||
__declspec(dllimport) ImportInlineSpecials& operator=(ImportInlineSpecials&&) { return *this; }
|
__declspec(dllimport) ImportInlineSpecials& operator=(ImportInlineSpecials&&) { return *this; }
|
||||||
};
|
};
|
||||||
ImportInlineSpecials::ImportInlineSpecials(const ImportInlineSpecials&) {}
|
ImportInlineSpecials::ImportInlineSpecials(const ImportInlineSpecials&) {}
|
||||||
|
@ -520,36 +520,36 @@ struct ImportDefaulted {
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN15ImportDefaultedD1Ev(%struct.ImportDefaulted* %this)
|
||||||
__declspec(dllimport) ~ImportDefaulted() = default;
|
__declspec(dllimport) ~ImportDefaulted() = default;
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@AEBU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@AEBU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G64-DAG: declare dllimport void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* nonnull)
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@ABU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* nonnull)
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1ERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportDefaulted(const ImportDefaulted&) = default;
|
__declspec(dllimport) ImportDefaulted(const ImportDefaulted&) = default;
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* nonnull)
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* nonnull)
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSERKS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportDefaulted& operator=(const ImportDefaulted&) = default;
|
__declspec(dllimport) ImportDefaulted& operator=(const ImportDefaulted&) = default;
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaulted* returned, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G64-DAG: declare dllimport void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* nonnull)
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc %struct.ImportDefaulted* @"\01??0ImportDefaulted@@QAE@$$QAU0@@Z"(%struct.ImportDefaulted* returned %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* nonnull)
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc void @_ZN15ImportDefaultedC1EOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportDefaulted(ImportDefaulted&&) = default;
|
__declspec(dllimport) ImportDefaulted(ImportDefaulted&&) = default;
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted*, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* nonnull)
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @"\01??4ImportDefaulted@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
// GO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* nonnull)
|
// GO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaulted* @_ZN15ImportDefaultedaSEOS_(%struct.ImportDefaulted* %this, %struct.ImportDefaulted* dereferenceable({{[0-9]+}}))
|
||||||
__declspec(dllimport) ImportDefaulted& operator=(ImportDefaulted&&) = default;
|
__declspec(dllimport) ImportDefaulted& operator=(ImportDefaulted&&) = default;
|
||||||
|
|
||||||
ForceNonTrivial v; // ensure special members are non-trivial
|
ForceNonTrivial v; // ensure special members are non-trivial
|
||||||
|
@ -581,30 +581,30 @@ __declspec(dllimport) ImportDefaultedDefs::ImportDefaultedDefs() = default;
|
||||||
// G64-DAG: declare dllimport void @_ZN19ImportDefaultedDefsD1Ev(%struct.ImportDefaultedDefs*)
|
// G64-DAG: declare dllimport void @_ZN19ImportDefaultedDefsD1Ev(%struct.ImportDefaultedDefs*)
|
||||||
__declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs() = default;
|
__declspec(dllimport) ImportDefaultedDefs::~ImportDefaultedDefs() = default;
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@ABU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* nonnull)
|
// M64-DAG: declare dllimport %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@AEBU0@@Z"(%struct.ImportDefaultedDefs* returned, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* nonnull)
|
// G64-DAG: declare dllimport void @_ZN19ImportDefaultedDefsC1ERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = default;
|
inline ImportDefaultedDefs::ImportDefaultedDefs(const ImportDefaultedDefs&) = default;
|
||||||
|
|
||||||
// M32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* nonnull)
|
// M32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@ABU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: declare dllimport nonnull %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* nonnull)
|
// M64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@AEBU0@@Z"(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: declare dllimport x86_thiscallcc nonnull %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* nonnull)
|
// G32-DAG: declare dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: declare dllimport nonnull %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* nonnull)
|
// G64-DAG: declare dllimport dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSERKS_(%struct.ImportDefaultedDefs*, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const ImportDefaultedDefs&) = default;
|
inline ImportDefaultedDefs& ImportDefaultedDefs::operator=(const ImportDefaultedDefs&) = default;
|
||||||
|
|
||||||
// M32-DAG: define x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* nonnull)
|
// M32-DAG: define x86_thiscallcc %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QAE@$$QAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* nonnull)
|
// M64-DAG: define %struct.ImportDefaultedDefs* @"\01??0ImportDefaultedDefs@@QEAA@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* returned %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// G64-DAG: define void @_ZN19ImportDefaultedDefsC1EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// G32-DAG: define x86_thiscallcc void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// G64-DAG: define void @_ZN19ImportDefaultedDefsC2EOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // dllimport ignored
|
ImportDefaultedDefs::ImportDefaultedDefs(ImportDefaultedDefs&&) = default; // dllimport ignored
|
||||||
|
|
||||||
// M32-DAG: define x86_thiscallcc nonnull %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// M32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QAEAAU0@$$QAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// M64-DAG: define nonnull %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// M64-DAG: define dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @"\01??4ImportDefaultedDefs@@QEAAAEAU0@$$QEAU0@@Z"(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G32-DAG: define x86_thiscallcc nonnull %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// G32-DAG: define x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
// G64-DAG: define nonnull %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* nonnull)
|
// G64-DAG: define dereferenceable({{[0-9]+}}) %struct.ImportDefaultedDefs* @_ZN19ImportDefaultedDefsaSEOS_(%struct.ImportDefaultedDefs* %this, %struct.ImportDefaultedDefs* dereferenceable({{[0-9]+}}))
|
||||||
ImportDefaultedDefs& ImportDefaultedDefs::operator=(ImportDefaultedDefs&&) = default; // dllimport ignored
|
ImportDefaultedDefs& ImportDefaultedDefs::operator=(ImportDefaultedDefs&&) = default; // dllimport ignored
|
||||||
|
|
||||||
USESPECIALS(ImportDefaultedDefs)
|
USESPECIALS(ImportDefaultedDefs)
|
||||||
|
|
|
@ -539,11 +539,11 @@ struct __declspec(dllimport) T {
|
||||||
// MO1-DAG: @"\01?b@T@@2HA" = external dllimport global i32
|
// MO1-DAG: @"\01?b@T@@2HA" = external dllimport global i32
|
||||||
|
|
||||||
T& operator=(T&) = default;
|
T& operator=(T&) = default;
|
||||||
// MO1-DAG: define available_externally dllimport x86_thiscallcc nonnull %struct.T* @"\01??4T@@QAEAAU0@AAU0@@Z"
|
// MO1-DAG: define available_externally dllimport x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0@AAU0@@Z"
|
||||||
|
|
||||||
T& operator=(T&&) = default;
|
T& operator=(T&&) = default;
|
||||||
// Note: Don't mark inline move operators dllimport because current MSVC versions don't export them.
|
// Note: Don't mark inline move operators dllimport because current MSVC versions don't export them.
|
||||||
// MO1-DAG: define linkonce_odr x86_thiscallcc nonnull %struct.T* @"\01??4T@@QAEAAU0@$$QAU0@@Z"
|
// MO1-DAG: define linkonce_odr x86_thiscallcc dereferenceable({{[0-9]+}}) %struct.T* @"\01??4T@@QAEAAU0@$$QAU0@@Z"
|
||||||
};
|
};
|
||||||
USEMEMFUNC(T, a)
|
USEMEMFUNC(T, a)
|
||||||
USEVAR(T::b)
|
USEVAR(T::b)
|
||||||
|
|
|
@ -34,7 +34,7 @@ void test2() {
|
||||||
// CHECK-NEXT: [[SELECTORVAR:%.*]] = alloca i32
|
// CHECK-NEXT: [[SELECTORVAR:%.*]] = alloca i32
|
||||||
// CHECK-NEXT: [[EXNOBJ:%.*]] = call i8* @__cxa_allocate_exception(i64 16)
|
// CHECK-NEXT: [[EXNOBJ:%.*]] = call i8* @__cxa_allocate_exception(i64 16)
|
||||||
// CHECK-NEXT: [[EXN:%.*]] = bitcast i8* [[EXNOBJ]] to [[DSTAR:%[^*]*\*]]
|
// CHECK-NEXT: [[EXN:%.*]] = bitcast i8* [[EXNOBJ]] to [[DSTAR:%[^*]*\*]]
|
||||||
// CHECK-NEXT: invoke void @_ZN7test2_DC1ERKS_([[DSTAR]] [[EXN]], [[DSTAR]] nonnull @d2)
|
// CHECK-NEXT: invoke void @_ZN7test2_DC1ERKS_([[DSTAR]] [[EXN]], [[DSTAR]] dereferenceable({{[0-9]+}}) @d2)
|
||||||
// CHECK-NEXT: to label %[[CONT:.*]] unwind label %{{.*}}
|
// CHECK-NEXT: to label %[[CONT:.*]] unwind label %{{.*}}
|
||||||
// : [[CONT]]: (can't check this in Release-Asserts builds)
|
// : [[CONT]]: (can't check this in Release-Asserts builds)
|
||||||
// CHECK: call void @__cxa_throw(i8* [[EXNOBJ]], i8* bitcast ({{.*}}* @_ZTI7test2_D to i8*), i8* null) [[NR]]
|
// CHECK: call void @__cxa_throw(i8* [[EXNOBJ]], i8* bitcast ({{.*}}* @_ZTI7test2_D to i8*), i8* null) [[NR]]
|
||||||
|
@ -428,7 +428,7 @@ namespace test16 {
|
||||||
// CHECK-NEXT: [[T0:%.*]] = bitcast i8* [[EXN]] to [[B:%.*]]*
|
// CHECK-NEXT: [[T0:%.*]] = bitcast i8* [[EXN]] to [[B:%.*]]*
|
||||||
// CHECK-NEXT: invoke void @_ZN6test161AC1Ev([[A]]* [[TEMP]])
|
// CHECK-NEXT: invoke void @_ZN6test161AC1Ev([[A]]* [[TEMP]])
|
||||||
// CHECK: store i1 true, i1* [[TEMP_ACTIVE]]
|
// CHECK: store i1 true, i1* [[TEMP_ACTIVE]]
|
||||||
// CHECK-NEXT: invoke void @_ZN6test161BC1ERKNS_1AE([[B]]* [[T0]], [[A]]* nonnull [[TEMP]])
|
// CHECK-NEXT: invoke void @_ZN6test161BC1ERKNS_1AE([[B]]* [[T0]], [[A]]* dereferenceable({{[0-9]+}}) [[TEMP]])
|
||||||
// CHECK: store i1 false, i1* [[EXN_ACTIVE]]
|
// CHECK: store i1 false, i1* [[EXN_ACTIVE]]
|
||||||
// CHECK-NEXT: invoke void @__cxa_throw(i8* [[EXN]],
|
// CHECK-NEXT: invoke void @__cxa_throw(i8* [[EXN]],
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ bool foo(Empty e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void caller(Empty &e) {
|
void caller(Empty &e) {
|
||||||
// CHECK: @_Z6callerR5Empty(%struct.Empty* nonnull %e)
|
// CHECK: @_Z6callerR5Empty(%struct.Empty* dereferenceable({{[0-9]+}}) %e)
|
||||||
// CHECK: call {{.*}} @_ZN5EmptyC1ERKS_(%struct.Empty* [[NEWTMP:%.*]], %struct.Empty*
|
// CHECK: call {{.*}} @_ZN5EmptyC1ERKS_(%struct.Empty* [[NEWTMP:%.*]], %struct.Empty*
|
||||||
// CHECK: call {{.*}} @_Z3foo5Empty(%struct.Empty* [[NEWTMP]])
|
// CHECK: call {{.*}} @_Z3foo5Empty(%struct.Empty* [[NEWTMP]])
|
||||||
foo(e);
|
foo(e);
|
||||||
|
|
|
@ -279,7 +279,7 @@ namespace test5 {
|
||||||
// CHECK-NEXT: [[ADJ:%.*]] = call i8* @__cxa_get_exception_ptr(i8* [[EXN]])
|
// CHECK-NEXT: [[ADJ:%.*]] = call i8* @__cxa_get_exception_ptr(i8* [[EXN]])
|
||||||
// CHECK-NEXT: [[SRC:%.*]] = bitcast i8* [[ADJ]] to [[A_T]]*
|
// CHECK-NEXT: [[SRC:%.*]] = bitcast i8* [[ADJ]] to [[A_T]]*
|
||||||
// CHECK-NEXT: invoke void @_ZN5test51TC1Ev([[T_T]]* [[T]])
|
// CHECK-NEXT: invoke void @_ZN5test51TC1Ev([[T_T]]* [[T]])
|
||||||
// CHECK: invoke void @_ZN5test51AC1ERKS0_RKNS_1TE([[A_T]]* [[A]], [[A_T]]* nonnull [[SRC]], [[T_T]]* nonnull [[T]])
|
// CHECK: invoke void @_ZN5test51AC1ERKS0_RKNS_1TE([[A_T]]* [[A]], [[A_T]]* dereferenceable({{[0-9]+}}) [[SRC]], [[T_T]]* dereferenceable({{[0-9]+}}) [[T]])
|
||||||
// CHECK: invoke void @_ZN5test51TD1Ev([[T_T]]* [[T]])
|
// CHECK: invoke void @_ZN5test51TD1Ev([[T_T]]* [[T]])
|
||||||
// CHECK: call i8* @__cxa_begin_catch(i8* [[EXN]]) [[NUW]]
|
// CHECK: call i8* @__cxa_begin_catch(i8* [[EXN]]) [[NUW]]
|
||||||
// CHECK-NEXT: invoke void @_ZN5test51AD1Ev([[A_T]]* [[A]])
|
// CHECK-NEXT: invoke void @_ZN5test51AD1Ev([[A_T]]* [[A]])
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
void __attribute__((fastcall)) foo1(int &y);
|
void __attribute__((fastcall)) foo1(int &y);
|
||||||
void bar1(int &y) {
|
void bar1(int &y) {
|
||||||
// CHECK-LABEL: define void @_Z4bar1Ri
|
// CHECK-LABEL: define void @_Z4bar1Ri
|
||||||
// CHECK: call x86_fastcallcc void @_Z4foo1Ri(i32* inreg nonnull %
|
// CHECK: call x86_fastcallcc void @_Z4foo1Ri(i32* inreg dereferenceable({{[0-9]+}}) %
|
||||||
foo1(y);
|
foo1(y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace test0 {
|
||||||
// CHECK: store i1 true, i1* [[CLEANUPACTIVE]]
|
// CHECK: store i1 true, i1* [[CLEANUPACTIVE]]
|
||||||
// CHECK: [[NEWCAST:%.*]] = bitcast i8* [[NEW]] to [[V]]*
|
// CHECK: [[NEWCAST:%.*]] = bitcast i8* [[NEW]] to [[V]]*
|
||||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]])
|
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]])
|
||||||
// CHECK: invoke void @_ZN5test01VC1ERKNS_1AE([[V]]* [[NEWCAST]], [[A]]* nonnull [[TMP]])
|
// CHECK: invoke void @_ZN5test01VC1ERKNS_1AE([[V]]* [[NEWCAST]], [[A]]* dereferenceable({{[0-9]+}}) [[TMP]])
|
||||||
// CHECK: store i1 false, i1* [[CLEANUPACTIVE]]
|
// CHECK: store i1 false, i1* [[CLEANUPACTIVE]]
|
||||||
// CHECK-NEXT: invoke void @_ZN5test01AD1Ev([[A]]* [[TMP]])
|
// CHECK-NEXT: invoke void @_ZN5test01AD1Ev([[A]]* [[TMP]])
|
||||||
A y;
|
A y;
|
||||||
|
|
|
@ -40,7 +40,7 @@ void test_D(D d1, D d2) {
|
||||||
d1 = d2;
|
d1 = d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.D* @_ZN1DaSERS_
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.D* @_ZN1DaSERS_
|
||||||
// CHECK: {{call.*_ZN1AaSERS_}}
|
// CHECK: {{call.*_ZN1AaSERS_}}
|
||||||
// CHECK: {{call.*_ZN1BaSERS_}}
|
// CHECK: {{call.*_ZN1BaSERS_}}
|
||||||
// CHECK: {{call.*_ZN1CaSERKS_}}
|
// CHECK: {{call.*_ZN1CaSERKS_}}
|
||||||
|
|
|
@ -40,7 +40,7 @@ void f(D d) {
|
||||||
D d2(d);
|
D d2(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D* nonnull) unnamed_addr
|
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
// CHECK: call void @_ZN1AC1Ev
|
// CHECK: call void @_ZN1AC1Ev
|
||||||
// CHECK: call void @_ZN1CC2ERS_1A
|
// CHECK: call void @_ZN1CC2ERS_1A
|
||||||
// CHECK: call void @_ZN1AD1Ev
|
// CHECK: call void @_ZN1AD1Ev
|
||||||
|
|
|
@ -192,7 +192,7 @@ namespace PR12123 {
|
||||||
};
|
};
|
||||||
void B::h() { f(); }
|
void B::h() { f(); }
|
||||||
}
|
}
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %"struct.PR12123::A"* @_ZZN7PR121231B1fERKSt9type_infoEd_NKUlvE_clEv
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %"struct.PR12123::A"* @_ZZN7PR121231B1fERKSt9type_infoEd_NKUlvE_clEv
|
||||||
|
|
||||||
namespace PR12808 {
|
namespace PR12808 {
|
||||||
template <typename> struct B {
|
template <typename> struct B {
|
||||||
|
|
|
@ -280,13 +280,13 @@ struct Ops {
|
||||||
void *v;
|
void *v;
|
||||||
};
|
};
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsplERKS_
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops* @_ZN3OpsplERKS_
|
||||||
Ops& Ops::operator+(const Ops&) { return *this; }
|
Ops& Ops::operator+(const Ops&) { return *this; }
|
||||||
// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsmiERKS_
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops* @_ZN3OpsmiERKS_
|
||||||
Ops& Ops::operator-(const Ops&) { return *this; }
|
Ops& Ops::operator-(const Ops&) { return *this; }
|
||||||
// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsanERKS_
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops* @_ZN3OpsanERKS_
|
||||||
Ops& Ops::operator&(const Ops&) { return *this; }
|
Ops& Ops::operator&(const Ops&) { return *this; }
|
||||||
// CHECK-LABEL: define nonnull %struct.Ops* @_ZN3OpsmlERKS_
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.Ops* @_ZN3OpsmlERKS_
|
||||||
Ops& Ops::operator*(const Ops&) { return *this; }
|
Ops& Ops::operator*(const Ops&) { return *this; }
|
||||||
|
|
||||||
// PR5861
|
// PR5861
|
||||||
|
|
|
@ -137,10 +137,10 @@ void call_small_arg_with_dtor() {
|
||||||
|
|
||||||
// Test that references aren't destroyed in the callee.
|
// Test that references aren't destroyed in the callee.
|
||||||
void ref_small_arg_with_dtor(const SmallWithDtor &s) { }
|
void ref_small_arg_with_dtor(const SmallWithDtor &s) { }
|
||||||
// WIN32: define void @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"(%struct.SmallWithDtor* nonnull %s) {{.*}} {
|
// WIN32: define void @"\01?ref_small_arg_with_dtor@@YAXABUSmallWithDtor@@@Z"(%struct.SmallWithDtor* dereferenceable({{[0-9]+}}) %s) {{.*}} {
|
||||||
// WIN32-NOT: call x86_thiscallcc void @"\01??1SmallWithDtor@@QAE@XZ"
|
// WIN32-NOT: call x86_thiscallcc void @"\01??1SmallWithDtor@@QAE@XZ"
|
||||||
// WIN32: }
|
// WIN32: }
|
||||||
// WIN64-LABEL: define void @"\01?ref_small_arg_with_dtor@@YAXAEBUSmallWithDtor@@@Z"(%struct.SmallWithDtor* nonnull %s)
|
// WIN64-LABEL: define void @"\01?ref_small_arg_with_dtor@@YAXAEBUSmallWithDtor@@@Z"(%struct.SmallWithDtor* dereferenceable({{[0-9]+}}) %s)
|
||||||
|
|
||||||
void big_arg_with_dtor(BigWithDtor s) {}
|
void big_arg_with_dtor(BigWithDtor s) {}
|
||||||
// WIN64-LABEL: define void @"\01?big_arg_with_dtor@@YAXUBigWithDtor@@@Z"(%struct.BigWithDtor* %s)
|
// WIN64-LABEL: define void @"\01?big_arg_with_dtor@@YAXUBigWithDtor@@@Z"(%struct.BigWithDtor* %s)
|
||||||
|
|
|
@ -119,7 +119,7 @@ inline S &UnreachableStatic() {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.S* @"\01?UnreachableStatic@@YAAAUS@@XZ"()
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.S* @"\01?UnreachableStatic@@YAAAUS@@XZ"()
|
||||||
// CHECK: and i32 {{.*}}, 2
|
// CHECK: and i32 {{.*}}, 2
|
||||||
// CHECK: or i32 {{.*}}, 2
|
// CHECK: or i32 {{.*}}, 2
|
||||||
// CHECK: ret
|
// CHECK: ret
|
||||||
|
@ -129,7 +129,7 @@ inline S &getS() {
|
||||||
return TheS;
|
return TheS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.S* @"\01?getS@@YAAAUS@@XZ"
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.S* @"\01?getS@@YAAAUS@@XZ"
|
||||||
// CHECK: load i32* @"\01??_B?1??getS@@YAAAUS@@XZ@51"
|
// CHECK: load i32* @"\01??_B?1??getS@@YAAAUS@@XZ@51"
|
||||||
// CHECK: and i32 {{.*}}, 1
|
// CHECK: and i32 {{.*}}, 1
|
||||||
// CHECK: icmp ne i32 {{.*}}, 0
|
// CHECK: icmp ne i32 {{.*}}, 0
|
||||||
|
|
|
@ -169,7 +169,7 @@ X test6() {
|
||||||
return a;
|
return a;
|
||||||
// CHECK: [[A:%.*]] = alloca [[X:%.*]], align 8
|
// CHECK: [[A:%.*]] = alloca [[X:%.*]], align 8
|
||||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1Ev([[X]]* [[A]])
|
// CHECK-NEXT: call {{.*}} @_ZN1XC1Ev([[X]]* [[A]])
|
||||||
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* {{%.*}}, [[X]]* nonnull [[A]])
|
// CHECK-NEXT: call {{.*}} @_ZN1XC1ERKS_([[X]]* {{%.*}}, [[X]]* dereferenceable({{[0-9]+}}) [[A]])
|
||||||
// CHECK-NEXT: call {{.*}} @_ZN1XD1Ev([[X]]* [[A]])
|
// CHECK-NEXT: call {{.*}} @_ZN1XD1Ev([[X]]* [[A]])
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,59 +108,59 @@ CALL_AO(InnerClassMember)
|
||||||
CALL_AO(PackedMembers)
|
CALL_AO(PackedMembers)
|
||||||
|
|
||||||
// Basic copy-assignment:
|
// Basic copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.Basic* @_ZN5BasicaSERKS_(%struct.Basic* %this, %struct.Basic* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.Basic* @_ZN5BasicaSERKS_(%struct.Basic* %this, %struct.Basic* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret %struct.Basic*
|
// CHECK: ret %struct.Basic*
|
||||||
|
|
||||||
// PODMember copy-assignment:
|
// PODMember copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.PODMember* @_ZN9PODMemberaSERKS_(%struct.PODMember* %this, %struct.PODMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.PODMember* @_ZN9PODMemberaSERKS_(%struct.PODMember* %this, %struct.PODMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret %struct.PODMember*
|
// CHECK: ret %struct.PODMember*
|
||||||
|
|
||||||
// PODLikeMember copy-assignment:
|
// PODLikeMember copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.PODLikeMember* @_ZN13PODLikeMemberaSERKS_(%struct.PODLikeMember* %this, %struct.PODLikeMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.PODLikeMember* @_ZN13PODLikeMemberaSERKS_(%struct.PODLikeMember* %this, %struct.PODLikeMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret %struct.PODLikeMember*
|
// CHECK: ret %struct.PODLikeMember*
|
||||||
|
|
||||||
// ArrayMember copy-assignment:
|
// ArrayMember copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.ArrayMember* @_ZN11ArrayMemberaSERKS_(%struct.ArrayMember* %this, %struct.ArrayMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.ArrayMember* @_ZN11ArrayMemberaSERKS_(%struct.ArrayMember* %this, %struct.ArrayMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
||||||
// CHECK: ret %struct.ArrayMember*
|
// CHECK: ret %struct.ArrayMember*
|
||||||
|
|
||||||
// VolatileMember copy-assignment:
|
// VolatileMember copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.VolatileMember* @_ZN14VolatileMemberaSERKS_(%struct.VolatileMember* %this, %struct.VolatileMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.VolatileMember* @_ZN14VolatileMemberaSERKS_(%struct.VolatileMember* %this, %struct.VolatileMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: load volatile i32* {{.*}}, align 4
|
// CHECK: load volatile i32* {{.*}}, align 4
|
||||||
// CHECK: store volatile i32 {{.*}}, align 4
|
// CHECK: store volatile i32 {{.*}}, align 4
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret %struct.VolatileMember*
|
// CHECK: ret %struct.VolatileMember*
|
||||||
|
|
||||||
// BitfieldMember copy-assignment:
|
// BitfieldMember copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.BitfieldMember* @_ZN14BitfieldMemberaSERKS_(%struct.BitfieldMember* %this, %struct.BitfieldMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.BitfieldMember* @_ZN14BitfieldMemberaSERKS_(%struct.BitfieldMember* %this, %struct.BitfieldMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 3, i32 1{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 3, i32 1{{.*}})
|
||||||
// CHECK: ret %struct.BitfieldMember*
|
// CHECK: ret %struct.BitfieldMember*
|
||||||
|
|
||||||
// InnerClass copy-assignment:
|
// InnerClass copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.InnerClassMember* @_ZN16InnerClassMemberaSERKS_(%struct.InnerClassMember* %this, %struct.InnerClassMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.InnerClassMember* @_ZN16InnerClassMemberaSERKS_(%struct.InnerClassMember* %this, %struct.InnerClassMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret %struct.InnerClassMember*
|
// CHECK: ret %struct.InnerClassMember*
|
||||||
|
|
||||||
// PackedMembers copy-assignment:
|
// PackedMembers copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr nonnull %struct.PackedMembers* @_ZN13PackedMembersaSERKS_(%struct.PackedMembers* %this, %struct.PackedMembers* nonnull)
|
// CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.PackedMembers* @_ZN13PackedMembersaSERKS_(%struct.PackedMembers* %this, %struct.PackedMembers* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call nonnull %struct.NonPOD* @_ZN6NonPODaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.NonPOD* @_ZN6NonPODaSERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 1{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 1{{.*}})
|
||||||
// CHECK: ret %struct.PackedMembers*
|
// CHECK: ret %struct.PackedMembers*
|
||||||
|
|
||||||
|
@ -184,21 +184,21 @@ CALL_CC(PODMember)
|
||||||
CALL_CC(Basic)
|
CALL_CC(Basic)
|
||||||
|
|
||||||
// Basic copy-constructor:
|
// Basic copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN5BasicC2ERKS_(%struct.Basic* %this, %struct.Basic* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN5BasicC2ERKS_(%struct.Basic* %this, %struct.Basic* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// PODMember copy-constructor:
|
// PODMember copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN9PODMemberC2ERKS_(%struct.PODMember* %this, %struct.PODMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN9PODMemberC2ERKS_(%struct.PODMember* %this, %struct.PODMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// PODLikeMember copy-constructor:
|
// PODLikeMember copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN13PODLikeMemberC2ERKS_(%struct.PODLikeMember* %this, %struct.PODLikeMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN13PODLikeMemberC2ERKS_(%struct.PODLikeMember* %this, %struct.PODLikeMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
||||||
// CHECK: invoke void @_ZN6NonPODC1ERKS_
|
// CHECK: invoke void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
|
@ -207,14 +207,14 @@ CALL_CC(Basic)
|
||||||
// CHECK: invoke void @_ZN7PODLikeD1Ev
|
// CHECK: invoke void @_ZN7PODLikeD1Ev
|
||||||
|
|
||||||
// ArrayMember copy-constructor:
|
// ArrayMember copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN11ArrayMemberC2ERKS_(%struct.ArrayMember* %this, %struct.ArrayMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN11ArrayMemberC2ERKS_(%struct.ArrayMember* %this, %struct.ArrayMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 64, i32 4{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// VolatileMember copy-constructor:
|
// VolatileMember copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN14VolatileMemberC2ERKS_(%struct.VolatileMember* %this, %struct.VolatileMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN14VolatileMemberC2ERKS_(%struct.VolatileMember* %this, %struct.VolatileMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: load volatile i32* {{.*}}, align 4
|
// CHECK: load volatile i32* {{.*}}, align 4
|
||||||
// CHECK: store volatile i32 {{.*}}, align 4
|
// CHECK: store volatile i32 {{.*}}, align 4
|
||||||
|
@ -223,34 +223,34 @@ CALL_CC(Basic)
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// BitfieldMember copy-constructor:
|
// BitfieldMember copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN14BitfieldMemberC2ERKS_(%struct.BitfieldMember* %this, %struct.BitfieldMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN14BitfieldMemberC2ERKS_(%struct.BitfieldMember* %this, %struct.BitfieldMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 3, i32 1{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 3, i32 1{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// InnerClass copy-constructor:
|
// InnerClass copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN16InnerClassMemberC2ERKS_(%struct.InnerClassMember* %this, %struct.InnerClassMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN16InnerClassMemberC2ERKS_(%struct.InnerClassMember* %this, %struct.InnerClassMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 32, i32 4{{.*}})
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// ReferenceMember copy-constructor:
|
// ReferenceMember copy-constructor:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN15ReferenceMemberC2ERKS_(%struct.ReferenceMember* %this, %struct.ReferenceMember* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN15ReferenceMemberC2ERKS_(%struct.ReferenceMember* %this, %struct.ReferenceMember* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 8{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 8{{.*}})
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 8{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 8{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// BitfieldMember2 copy-constructor:
|
// BitfieldMember2 copy-constructor:
|
||||||
// CHECK-2-LABEL: define linkonce_odr void @_ZN15BitfieldMember2C2ERKS_(%struct.BitfieldMember2* %this, %struct.BitfieldMember2* nonnull)
|
// CHECK-2-LABEL: define linkonce_odr void @_ZN15BitfieldMember2C2ERKS_(%struct.BitfieldMember2* %this, %struct.BitfieldMember2* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK-2: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4, i1 false)
|
// CHECK-2: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 4, i1 false)
|
||||||
// CHECK-2: call void @_ZN6NonPODC1ERKS_
|
// CHECK-2: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK-2: ret void
|
// CHECK-2: ret void
|
||||||
|
|
||||||
// PackedMembers copy-assignment:
|
// PackedMembers copy-assignment:
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN13PackedMembersC2ERKS_(%struct.PackedMembers* %this, %struct.PackedMembers* nonnull)
|
// CHECK-LABEL: define linkonce_odr void @_ZN13PackedMembersC2ERKS_(%struct.PackedMembers* %this, %struct.PackedMembers* dereferenceable({{[0-9]+}}))
|
||||||
// CHECK: call void @_ZN6NonPODC1ERKS_
|
// CHECK: call void @_ZN6NonPODC1ERKS_
|
||||||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 1{{.*}})
|
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64({{.*}}i64 16, i32 1{{.*}})
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
|
@ -202,7 +202,7 @@ namespace BoolPtrToMember {
|
||||||
bool member;
|
bool member;
|
||||||
};
|
};
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i8* @_ZN15BoolPtrToMember1fERNS_1XEMS0_b
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_ZN15BoolPtrToMember1fERNS_1XEMS0_b
|
||||||
bool &f(X &x, bool X::*member) {
|
bool &f(X &x, bool X::*member) {
|
||||||
// CHECK: {{bitcast.* to i8\*}}
|
// CHECK: {{bitcast.* to i8\*}}
|
||||||
// CHECK-NEXT: getelementptr inbounds i8*
|
// CHECK-NEXT: getelementptr inbounds i8*
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// PR6024
|
// PR6024
|
||||||
extern int i;
|
extern int i;
|
||||||
|
|
||||||
// CHECK: define nonnull i32* @_Z16lvalue_noop_castv() [[NUW:#[0-9]+]]
|
// CHECK: define dereferenceable({{[0-9]+}}) i32* @_Z16lvalue_noop_castv() [[NUW:#[0-9]+]]
|
||||||
const int &lvalue_noop_cast() {
|
const int &lvalue_noop_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: store i32 17, i32*
|
// CHECK: store i32 17, i32*
|
||||||
|
@ -15,7 +15,7 @@ const int &lvalue_noop_cast() {
|
||||||
return 17;
|
return 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i16* @_Z20lvalue_integral_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i16* @_Z20lvalue_integral_castv()
|
||||||
const short &lvalue_integral_cast() {
|
const short &lvalue_integral_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: store i16 17, i16*
|
// CHECK: store i16 17, i16*
|
||||||
|
@ -27,7 +27,7 @@ const short &lvalue_integral_cast() {
|
||||||
return 17;
|
return 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i16* @_Z29lvalue_floating_integral_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i16* @_Z29lvalue_floating_integral_castv()
|
||||||
const short &lvalue_floating_integral_cast() {
|
const short &lvalue_floating_integral_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: store i16 17, i16*
|
// CHECK: store i16 17, i16*
|
||||||
|
@ -39,7 +39,7 @@ const short &lvalue_floating_integral_cast() {
|
||||||
return 17.5;
|
return 17.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull float* @_Z29lvalue_integral_floating_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) float* @_Z29lvalue_integral_floating_castv()
|
||||||
const float &lvalue_integral_floating_cast() {
|
const float &lvalue_integral_floating_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: store float 1.700000e+{{0*}}1, float*
|
// CHECK: store float 1.700000e+{{0*}}1, float*
|
||||||
|
@ -51,7 +51,7 @@ const float &lvalue_integral_floating_cast() {
|
||||||
return 17;
|
return 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull float* @_Z20lvalue_floating_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) float* @_Z20lvalue_floating_castv()
|
||||||
const float &lvalue_floating_cast() {
|
const float &lvalue_floating_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: store float 1.700000e+{{0*}}1, float*
|
// CHECK: store float 1.700000e+{{0*}}1, float*
|
||||||
|
@ -65,7 +65,7 @@ const float &lvalue_floating_cast() {
|
||||||
|
|
||||||
int get_int();
|
int get_int();
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i8* @_Z24lvalue_integer_bool_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z24lvalue_integer_bool_castv()
|
||||||
const bool &lvalue_integer_bool_cast() {
|
const bool &lvalue_integer_bool_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: call i32 @_Z7get_intv()
|
// CHECK: call i32 @_Z7get_intv()
|
||||||
|
@ -82,7 +82,7 @@ const bool &lvalue_integer_bool_cast() {
|
||||||
|
|
||||||
float get_float();
|
float get_float();
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i8* @_Z25lvalue_floating_bool_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z25lvalue_floating_bool_castv()
|
||||||
const bool &lvalue_floating_bool_cast() {
|
const bool &lvalue_floating_bool_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: call float @_Z9get_floatv()
|
// CHECK: call float @_Z9get_floatv()
|
||||||
|
@ -107,7 +107,7 @@ typedef int (X::*pmf)(int);
|
||||||
pm get_pointer_to_member_data();
|
pm get_pointer_to_member_data();
|
||||||
pmf get_pointer_to_member_function();
|
pmf get_pointer_to_member_function();
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i8* @_Z26lvalue_ptrmem_to_bool_castv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z26lvalue_ptrmem_to_bool_castv()
|
||||||
const bool &lvalue_ptrmem_to_bool_cast() {
|
const bool &lvalue_ptrmem_to_bool_cast() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: call i64 @_Z26get_pointer_to_member_datav()
|
// CHECK: call i64 @_Z26get_pointer_to_member_datav()
|
||||||
|
@ -125,7 +125,7 @@ const bool &lvalue_ptrmem_to_bool_cast() {
|
||||||
return get_pointer_to_member_data();
|
return get_pointer_to_member_data();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i8* @_Z27lvalue_ptrmem_to_bool_cast2v
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i8* @_Z27lvalue_ptrmem_to_bool_cast2v
|
||||||
const bool &lvalue_ptrmem_to_bool_cast2() {
|
const bool &lvalue_ptrmem_to_bool_cast2() {
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
// CHECK: {{call.*_Z30get_pointer_to_member_functionv}}
|
// CHECK: {{call.*_Z30get_pointer_to_member_functionv}}
|
||||||
|
|
|
@ -7,8 +7,8 @@ struct B : Spacer, A { };
|
||||||
|
|
||||||
B &getB();
|
B &getB();
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull %struct.A* @_Z4getAv()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) %struct.A* @_Z4getAv()
|
||||||
// CHECK: call nonnull %struct.B* @_Z4getBv()
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.B* @_Z4getBv()
|
||||||
// CHECK-NEXT: bitcast %struct.B*
|
// CHECK-NEXT: bitcast %struct.B*
|
||||||
// CHECK-NEXT: getelementptr inbounds i8*
|
// CHECK-NEXT: getelementptr inbounds i8*
|
||||||
// CHECK-NEXT: bitcast i8* {{.*}} to %struct.A*
|
// CHECK-NEXT: bitcast i8* {{.*}} to %struct.A*
|
||||||
|
@ -19,17 +19,17 @@ int &getIntLValue();
|
||||||
int &&getIntXValue();
|
int &&getIntXValue();
|
||||||
int getIntPRValue();
|
int getIntPRValue();
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i32* @_Z2f0v()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z2f0v()
|
||||||
// CHECK: call nonnull i32* @_Z12getIntLValuev()
|
// CHECK: call dereferenceable({{[0-9]+}}) i32* @_Z12getIntLValuev()
|
||||||
// CHECK-NEXT: ret i32*
|
// CHECK-NEXT: ret i32*
|
||||||
int &&f0() { return static_cast<int&&>(getIntLValue()); }
|
int &&f0() { return static_cast<int&&>(getIntLValue()); }
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i32* @_Z2f1v()
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z2f1v()
|
||||||
// CHECK: call nonnull i32* @_Z12getIntXValuev()
|
// CHECK: call dereferenceable({{[0-9]+}}) i32* @_Z12getIntXValuev()
|
||||||
// CHECK-NEXT: ret i32*
|
// CHECK-NEXT: ret i32*
|
||||||
int &&f1() { return static_cast<int&&>(getIntXValue()); }
|
int &&f1() { return static_cast<int&&>(getIntXValue()); }
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i32* @_Z2f2v
|
// CHECK-LABEL: define dereferenceable({{[0-9]+}}) i32* @_Z2f2v
|
||||||
// CHECK: call i32 @_Z13getIntPRValuev()
|
// CHECK: call i32 @_Z13getIntPRValuev()
|
||||||
// CHECK-NEXT: store i32 {{.*}}, i32*
|
// CHECK-NEXT: store i32 {{.*}}, i32*
|
||||||
// CHECK-NEXT: ret i32*
|
// CHECK-NEXT: ret i32*
|
||||||
|
@ -95,7 +95,7 @@ namespace test1 {
|
||||||
};
|
};
|
||||||
|
|
||||||
// CHECK-LABEL: define void @_ZN5test11BC2Ei(
|
// CHECK-LABEL: define void @_ZN5test11BC2Ei(
|
||||||
// CHECK: [[T0:%.*]] = call nonnull i32* @_ZN5test14moveERi(
|
// CHECK: [[T0:%.*]] = call dereferenceable({{[0-9]+}}) i32* @_ZN5test14moveERi(
|
||||||
// CHECK-NEXT: [[T1:%.*]] = load i32* [[T0]]
|
// CHECK-NEXT: [[T1:%.*]] = load i32* [[T0]]
|
||||||
// CHECK-NEXT: call void @_ZN5test11AC1Ei({{.*}}, i32 [[T1]])
|
// CHECK-NEXT: call void @_ZN5test11AC1Ei({{.*}}, i32 [[T1]])
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|
|
@ -325,7 +325,7 @@ int& f(int);
|
||||||
void g() {
|
void g() {
|
||||||
// CHECK: call void @_ZN3T121AC1Ev
|
// CHECK: call void @_ZN3T121AC1Ev
|
||||||
// CHECK-NEXT: call i32 @_ZN3T121A1fEv(
|
// CHECK-NEXT: call i32 @_ZN3T121A1fEv(
|
||||||
// CHECK-NEXT: call nonnull i32* @_ZN3T121fEi(
|
// CHECK-NEXT: call dereferenceable({{[0-9]+}}) i32* @_ZN3T121fEi(
|
||||||
// CHECK-NEXT: call void @_ZN3T121AD1Ev(
|
// CHECK-NEXT: call void @_ZN3T121AD1Ev(
|
||||||
int& i = f(A().f());
|
int& i = f(A().f());
|
||||||
}
|
}
|
||||||
|
@ -427,10 +427,10 @@ namespace Elision {
|
||||||
// CHECK-NEXT: [[J:%.*]] = alloca [[A]], align 8
|
// CHECK-NEXT: [[J:%.*]] = alloca [[A]], align 8
|
||||||
|
|
||||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[I]])
|
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[I]])
|
||||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[I]], [[A]]* nonnull [[X:%.*]])
|
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[I]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
|
||||||
A i = (c ? A() : x);
|
A i = (c ? A() : x);
|
||||||
|
|
||||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[J]], [[A]]* nonnull [[X]])
|
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[J]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[J]])
|
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[J]])
|
||||||
A j = (c ? x : A());
|
A j = (c ? x : A());
|
||||||
|
|
||||||
|
@ -450,10 +450,10 @@ namespace Elision {
|
||||||
A test3(int v, A x) {
|
A test3(int v, A x) {
|
||||||
if (v < 5)
|
if (v < 5)
|
||||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[RET:%.*]])
|
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[RET:%.*]])
|
||||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET]], [[A]]* nonnull [[X:%.*]])
|
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X:%.*]])
|
||||||
return (v < 0 ? A() : x);
|
return (v < 0 ? A() : x);
|
||||||
else
|
else
|
||||||
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET]], [[A]]* nonnull [[X]])
|
// CHECK: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||||
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[RET]])
|
// CHECK: call void @_ZN7Elision1AC1Ev([[A]]* [[RET]])
|
||||||
return (v > 10 ? x : A());
|
return (v > 10 ? x : A());
|
||||||
|
|
||||||
|
@ -471,7 +471,7 @@ namespace Elision {
|
||||||
// CHECK-NEXT: [[XS0:%.*]] = getelementptr inbounds [2 x [[A]]]* [[XS]], i64 0, i64 0
|
// CHECK-NEXT: [[XS0:%.*]] = getelementptr inbounds [2 x [[A]]]* [[XS]], i64 0, i64 0
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[XS0]])
|
// CHECK-NEXT: call void @_ZN7Elision1AC1Ev([[A]]* [[XS0]])
|
||||||
// CHECK-NEXT: [[XS1:%.*]] = getelementptr inbounds [[A]]* [[XS0]], i64 1
|
// CHECK-NEXT: [[XS1:%.*]] = getelementptr inbounds [[A]]* [[XS0]], i64 1
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[XS1]], [[A]]* nonnull [[X]])
|
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[XS1]], [[A]]* dereferenceable({{[0-9]+}}) [[X]])
|
||||||
A xs[] = { A(), x };
|
A xs[] = { A(), x };
|
||||||
|
|
||||||
// CHECK-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [2 x [[A]]]* [[XS]], i32 0, i32 0
|
// CHECK-NEXT: [[BEGIN:%.*]] = getelementptr inbounds [2 x [[A]]]* [[XS]], i32 0, i32 0
|
||||||
|
@ -498,7 +498,7 @@ namespace Elision {
|
||||||
|
|
||||||
// CHECK: call void @_ZN7Elision1BC1Ev([[B]]* [[BT0]])
|
// CHECK: call void @_ZN7Elision1BC1Ev([[B]]* [[BT0]])
|
||||||
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]* [[BT0]], i32 0, i32 0
|
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]* [[BT0]], i32 0, i32 0
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[AT0]], [[A]]* nonnull [[AM]])
|
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[AT0]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||||
// CHECK-NEXT: call void @_ZN7Elision5takeAENS_1AE([[A]]* [[AT0]])
|
// CHECK-NEXT: call void @_ZN7Elision5takeAENS_1AE([[A]]* [[AT0]])
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1AD1Ev([[A]]* [[AT0]])
|
// CHECK-NEXT: call void @_ZN7Elision1AD1Ev([[A]]* [[AT0]])
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT0]])
|
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT0]])
|
||||||
|
@ -506,13 +506,13 @@ namespace Elision {
|
||||||
|
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT1]])
|
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT1]])
|
||||||
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]* [[BT1]], i32 0, i32 0
|
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]* [[BT1]], i32 0, i32 0
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[X]], [[A]]* nonnull [[AM]])
|
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[X]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT1]])
|
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT1]])
|
||||||
A x = B().a;
|
A x = B().a;
|
||||||
|
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT2]])
|
// CHECK-NEXT: call void @_ZN7Elision1BC1Ev([[B]]* [[BT2]])
|
||||||
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]* [[BT2]], i32 0, i32 0
|
// CHECK-NEXT: [[AM:%.*]] = getelementptr inbounds [[B]]* [[BT2]], i32 0, i32 0
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET:%.*]], [[A]]* nonnull [[AM]])
|
// CHECK-NEXT: call void @_ZN7Elision1AC1ERKS0_([[A]]* [[RET:%.*]], [[A]]* dereferenceable({{[0-9]+}}) [[AM]])
|
||||||
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT2]])
|
// CHECK-NEXT: call void @_ZN7Elision1BD1Ev([[B]]* [[BT2]])
|
||||||
return B().a;
|
return B().a;
|
||||||
|
|
||||||
|
|
|
@ -97,7 +97,7 @@ void test7(bool cond) {
|
||||||
cond ? throw test7 : val;
|
cond ? throw test7 : val;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define nonnull i32* @_Z5test8b(
|
// CHECK-LABEL: define dereferenceable(4) i32* @_Z5test8b(
|
||||||
int &test8(bool cond) {
|
int &test8(bool cond) {
|
||||||
// CHECK: br i1
|
// CHECK: br i1
|
||||||
//
|
//
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace test0 {
|
||||||
void test(A t) {
|
void test(A t) {
|
||||||
// CHECK: [[ARR:%.*]] = load [[A:%.*]]** @_ZN5test05arrayE, align 8
|
// CHECK: [[ARR:%.*]] = load [[A:%.*]]** @_ZN5test05arrayE, align 8
|
||||||
// CHECK-NEXT: [[IDX:%.*]] = getelementptr inbounds [[A]]* [[ARR]], i64 0
|
// CHECK-NEXT: [[IDX:%.*]] = getelementptr inbounds [[A]]* [[ARR]], i64 0
|
||||||
// CHECK-NEXT: [[TMP:%.*]] = call nonnull [[A]]* @_ZNV5test01AaSERVKS0_([[A]]* [[IDX]], [[A]]* nonnull [[T:%.*]])
|
// CHECK-NEXT: [[TMP:%.*]] = call dereferenceable({{[0-9]+}}) [[A]]* @_ZNV5test01AaSERVKS0_([[A]]* [[IDX]], [[A]]* dereferenceable({{[0-9]+}}) [[T:%.*]])
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
array[0] = t;
|
array[0] = t;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,5 +15,5 @@ void call_once() {
|
||||||
f();
|
f();
|
||||||
f1();
|
f1();
|
||||||
}
|
}
|
||||||
// CHECK: call nonnull %0* @_Z1fv()
|
// CHECK: call dereferenceable({{[0-9]+}}) %0* @_Z1fv()
|
||||||
// CHECK: call nonnull %0* @_Z2f1v()
|
// CHECK: call dereferenceable({{[0-9]+}}) %0* @_Z2f1v()
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace test0 {
|
||||||
// CHECK-NEXT: load
|
// CHECK-NEXT: load
|
||||||
// CHECK-NEXT: [[T2:%.*]] = bitcast i8* {{.*}} to [[BYREF_A]]*
|
// CHECK-NEXT: [[T2:%.*]] = bitcast i8* {{.*}} to [[BYREF_A]]*
|
||||||
// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [[BYREF_A]]* [[T2]], i32 0, i32 7
|
// CHECK-NEXT: [[T3:%.*]] = getelementptr inbounds [[BYREF_A]]* [[T2]], i32 0, i32 7
|
||||||
// CHECK-NEXT: call void @_ZN5test01AC1ERKS0_([[A]]* [[T1]], [[A]]* nonnull [[T3]])
|
// CHECK-NEXT: call void @_ZN5test01AC1ERKS0_([[A]]* [[T1]], [[A]]* dereferenceable({{[0-9]+}}) [[T3]])
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|
||||||
// CHECK: define internal void [[DISPOSE_HELPER]](
|
// CHECK: define internal void [[DISPOSE_HELPER]](
|
||||||
|
|
|
@ -33,7 +33,7 @@ typename remove_reference<T>::type&& move(T &&x) {
|
||||||
|
|
||||||
// CHECK-LABEL: define void @_Z12library_moveRU8__strongP11objc_objectS2_
|
// CHECK-LABEL: define void @_Z12library_moveRU8__strongP11objc_objectS2_
|
||||||
void library_move(__strong id &x, __strong id &y) {
|
void library_move(__strong id &x, __strong id &y) {
|
||||||
// CHECK: call nonnull i8** @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
|
// CHECK: call dereferenceable({{[0-9]+}}) i8** @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
|
||||||
// CHECK: load i8**
|
// CHECK: load i8**
|
||||||
// CHECK: store i8* null, i8**
|
// CHECK: store i8* null, i8**
|
||||||
// CHECK: load i8***
|
// CHECK: load i8***
|
||||||
|
@ -46,7 +46,7 @@ void library_move(__strong id &x, __strong id &y) {
|
||||||
|
|
||||||
// CHECK-LABEL: define void @_Z12library_moveRU8__strongP11objc_object
|
// CHECK-LABEL: define void @_Z12library_moveRU8__strongP11objc_object
|
||||||
void library_move(__strong id &y) {
|
void library_move(__strong id &y) {
|
||||||
// CHECK: [[Y:%[a-zA-Z0-9]+]] = call nonnull i8** @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
|
// CHECK: [[Y:%[a-zA-Z0-9]+]] = call dereferenceable({{[0-9]+}}) i8** @_Z4moveIRU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_
|
||||||
// Load the object
|
// Load the object
|
||||||
// CHECK-NEXT: [[OBJ:%[a-zA-Z0-9]+]] = load i8** [[Y]]
|
// CHECK-NEXT: [[OBJ:%[a-zA-Z0-9]+]] = load i8** [[Y]]
|
||||||
// Null out y
|
// Null out y
|
||||||
|
@ -65,7 +65,7 @@ void library_move(__strong id &y) {
|
||||||
// CHECK-LABEL: define void @_Z10const_moveRKU8__strongP11objc_object(
|
// CHECK-LABEL: define void @_Z10const_moveRKU8__strongP11objc_object(
|
||||||
void const_move(const __strong id &x) {
|
void const_move(const __strong id &x) {
|
||||||
// CHECK: [[Y:%.*]] = alloca i8*,
|
// CHECK: [[Y:%.*]] = alloca i8*,
|
||||||
// CHECK: [[X:%.*]] = call nonnull i8** @_Z4moveIRKU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_(
|
// CHECK: [[X:%.*]] = call dereferenceable({{[0-9]+}}) i8** @_Z4moveIRKU8__strongP11objc_objectEON16remove_referenceIT_E4typeEOS5_(
|
||||||
// CHECK-NEXT: [[T0:%.*]] = load i8** [[X]]
|
// CHECK-NEXT: [[T0:%.*]] = load i8** [[X]]
|
||||||
// CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]])
|
// CHECK-NEXT: [[T1:%.*]] = call i8* @objc_retain(i8* [[T0]])
|
||||||
// CHECK-NEXT: store i8* [[T1]], i8** [[Y]]
|
// CHECK-NEXT: store i8* [[T1]], i8** [[Y]]
|
||||||
|
|
|
@ -91,7 +91,7 @@ void test_ObjCBlockMember_copy_assign(ObjCBlockMember m1, ObjCBlockMember m2) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implicitly-generated copy assignment operator for ObjCBlockMember
|
// Implicitly-generated copy assignment operator for ObjCBlockMember
|
||||||
// CHECK: define linkonce_odr nonnull {{%.*}}* @_ZN15ObjCBlockMemberaSERKS_(
|
// CHECK: define linkonce_odr dereferenceable({{[0-9]+}}) {{%.*}}* @_ZN15ObjCBlockMemberaSERKS_(
|
||||||
// CHECK: [[T0:%.*]] = getelementptr inbounds [[T:%.*]]* {{%.*}}, i32 0, i32 0
|
// CHECK: [[T0:%.*]] = getelementptr inbounds [[T:%.*]]* {{%.*}}, i32 0, i32 0
|
||||||
// CHECK-NEXT: [[T1:%.*]] = load i32 (i32)** [[T0]], align 8
|
// CHECK-NEXT: [[T1:%.*]] = load i32 (i32)** [[T0]], align 8
|
||||||
// CHECK-NEXT: [[T2:%.*]] = bitcast i32 (i32)* [[T1]] to i8*
|
// CHECK-NEXT: [[T2:%.*]] = bitcast i32 (i32)* [[T1]] to i8*
|
||||||
|
|
|
@ -43,7 +43,7 @@ void test_D(D d1, D d2) {
|
||||||
d1 = d2;
|
d1 = d2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-OBJ-LABEL: define linkonce_odr nonnull %struct.D* @_ZN1DaSERS_
|
// CHECK-OBJ-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.D* @_ZN1DaSERS_
|
||||||
// CHECK-OBJ: {{call.*_ZN1AaSERS_}}
|
// CHECK-OBJ: {{call.*_ZN1AaSERS_}}
|
||||||
// CHECK-OBJ: {{call.*_ZN1BaSERS_}}
|
// CHECK-OBJ: {{call.*_ZN1BaSERS_}}
|
||||||
// CHECK-OBJ: {{call.*_ZN1CaSERKS_}}
|
// CHECK-OBJ: {{call.*_ZN1CaSERKS_}}
|
||||||
|
|
|
@ -41,7 +41,7 @@ void f(D d) {
|
||||||
D d2(d);
|
D d2(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D* nonnull) unnamed_addr
|
// CHECK-LABEL: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D* dereferenceable({{[0-9]+}})) unnamed_addr
|
||||||
// CHECK: call void @_ZN1AC1Ev
|
// CHECK: call void @_ZN1AC1Ev
|
||||||
// CHECK: call void @_ZN1CC2ERS_1A
|
// CHECK: call void @_ZN1CC2ERS_1A
|
||||||
// CHECK: call void @_ZN1AD1Ev
|
// CHECK: call void @_ZN1AD1Ev
|
||||||
|
|
|
@ -24,5 +24,5 @@ static SetSection gSetSection;
|
||||||
// CHECK: [[SELF:%.*]] = alloca [[T6:%.*]]*, align
|
// CHECK: [[SELF:%.*]] = alloca [[T6:%.*]]*, align
|
||||||
// CHECK: [[T0:%.*]] = load {{.*}}* [[SELF]], align
|
// CHECK: [[T0:%.*]] = load {{.*}}* [[SELF]], align
|
||||||
// CHECK: [[T1:%.*]] = load {{.*}}* @"\01L_OBJC_SELECTOR_REFERENCES_"
|
// CHECK: [[T1:%.*]] = load {{.*}}* @"\01L_OBJC_SELECTOR_REFERENCES_"
|
||||||
// CHECK: [[C:%.*]] = call nonnull %struct.SetSection* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
// CHECK: [[C:%.*]] = call dereferenceable({{[0-9]+}}) %struct.SetSection* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||||
// CHECK: call nonnull i32* @_ZN10SetSection2atEi(%struct.SetSection* [[C]]
|
// CHECK: call dereferenceable({{[0-9]+}}) i32* @_ZN10SetSection2atEi(%struct.SetSection* [[C]]
|
||||||
|
|
|
@ -15,6 +15,6 @@
|
||||||
}
|
}
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// CHECK: [[T:%.*]] = call nonnull i32* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
// CHECK: [[T:%.*]] = call dereferenceable({{[0-9]+}}) i32* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||||
// CHECK: [[U:%.*]] = load i32* [[T]]
|
// CHECK: [[U:%.*]] = load i32* [[T]]
|
||||||
// CHECK [[V:%.*]] = icmp eq i32 [[U]], 0
|
// CHECK [[V:%.*]] = icmp eq i32 [[U]], 0
|
||||||
|
|
|
@ -11,7 +11,7 @@ void GetURL() const;
|
||||||
|
|
||||||
@implementation TNodeIconAndNameCell
|
@implementation TNodeIconAndNameCell
|
||||||
- (const TFENode&) node {
|
- (const TFENode&) node {
|
||||||
// CHECK: call nonnull %struct.TFENode* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
// CHECK: call dereferenceable({{[0-9]+}}) %struct.TFENode* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||||
// CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(%struct.TFENode* %{{.*}})
|
// CHECK-NEXT: call void @_ZNK7TFENode6GetURLEv(%struct.TFENode* %{{.*}})
|
||||||
self.node.GetURL();
|
self.node.GetURL();
|
||||||
} // expected-warning {{control reaches end of non-void function}}
|
} // expected-warning {{control reaches end of non-void function}}
|
||||||
|
@ -27,12 +27,12 @@ void f0(const X &parent);
|
||||||
- (const X&) target;
|
- (const X&) target;
|
||||||
@end
|
@end
|
||||||
void f1(A *a) {
|
void f1(A *a) {
|
||||||
// CHECK: [[PRP:%.*]] = call nonnull %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
// CHECK: [[PRP:%.*]] = call dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||||
// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* nonnull [[PRP]])
|
// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* dereferenceable({{[0-9]+}}) [[PRP]])
|
||||||
f0(a.target);
|
f0(a.target);
|
||||||
|
|
||||||
// CHECK: [[MSG:%.*]] = call nonnull %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
// CHECK: [[MSG:%.*]] = call dereferenceable({{[0-9]+}}) %struct.X* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||||
// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* nonnull [[MSG]])
|
// CHECK-NEXT:call void @_Z2f0RK1X(%struct.X* dereferenceable({{[0-9]+}}) [[MSG]])
|
||||||
f0([a target]);
|
f0([a target]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,5 +49,5 @@ void test(C *c, const A &a) {
|
||||||
// CHECK: [[ONE1:%.*]] = load %struct.A** [[AADDR:%.*]], align 8
|
// CHECK: [[ONE1:%.*]] = load %struct.A** [[AADDR:%.*]], align 8
|
||||||
// CHECK: [[TWO1:%.*]] = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_5", !invariant.load ![[MD_NUM]]
|
// CHECK: [[TWO1:%.*]] = load i8** @"\01L_OBJC_SELECTOR_REFERENCES_5", !invariant.load ![[MD_NUM]]
|
||||||
// CHECK: [[THREE1:%.*]] = bitcast [[TWOT:%.*]]* [[ZERO1:%.*]] to i8*
|
// CHECK: [[THREE1:%.*]] = bitcast [[TWOT:%.*]]* [[ZERO1:%.*]] to i8*
|
||||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.A*)*)(i8* [[THREE1]], i8* [[TWO1]], %struct.A* nonnull [[ONE1]])
|
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.A*)*)(i8* [[THREE1]], i8* [[TWO1]], %struct.A* dereferenceable({{[0-9]+}}) [[ONE1]])
|
||||||
// CHECK: store %struct.A* [[ONE1]], %struct.A** [[RESULT:%.*]], align 8
|
// CHECK: store %struct.A* [[ONE1]], %struct.A** [[RESULT:%.*]], align 8
|
||||||
|
|
|
@ -33,7 +33,7 @@ struct TCPPObject
|
||||||
// CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]], align 8
|
// CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]], align 8
|
||||||
// CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]], align 8
|
// CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]], align 8
|
||||||
// CHECK: [[CALL:%.*]] = call i32 @_Z7DEFAULTv()
|
// CHECK: [[CALL:%.*]] = call i32 @_Z7DEFAULTv()
|
||||||
// CHECK: call void @_ZN10TCPPObjectC1ERKS_i(%struct.TCPPObject* [[TWO]], %struct.TCPPObject* nonnull [[THREE]], i32 [[CALL]])
|
// CHECK: call void @_ZN10TCPPObjectC1ERKS_i(%struct.TCPPObject* [[TWO]], %struct.TCPPObject* dereferenceable({{[0-9]+}}) [[THREE]], i32 [[CALL]])
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// CHECK: define internal void @"\01-[MyDocument MyProperty]"(
|
// CHECK: define internal void @"\01-[MyDocument MyProperty]"(
|
||||||
|
@ -46,7 +46,7 @@ struct TCPPObject
|
||||||
// CHECK-LABEL: define internal void @__assign_helper_atomic_property_(
|
// CHECK-LABEL: define internal void @__assign_helper_atomic_property_(
|
||||||
// CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]], align 8
|
// CHECK: [[TWO:%.*]] = load %struct.TCPPObject** [[ADDR:%.*]], align 8
|
||||||
// CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]], align 8
|
// CHECK: [[THREE:%.*]] = load %struct.TCPPObject** [[ADDR1:%.*]], align 8
|
||||||
// CHECK: [[CALL:%.*]] = call nonnull %struct.TCPPObject* @_ZN10TCPPObjectaSERKS_(%struct.TCPPObject* [[TWO]], %struct.TCPPObject* nonnull [[THREE]])
|
// CHECK: [[CALL:%.*]] = call dereferenceable({{[0-9]+}}) %struct.TCPPObject* @_ZN10TCPPObjectaSERKS_(%struct.TCPPObject* [[TWO]], %struct.TCPPObject* dereferenceable({{[0-9]+}}) [[THREE]])
|
||||||
// CHECK: ret void
|
// CHECK: ret void
|
||||||
|
|
||||||
// CHECK: define internal void @"\01-[MyDocument setMyProperty:]"(
|
// CHECK: define internal void @"\01-[MyDocument setMyProperty:]"(
|
||||||
|
|
|
@ -32,7 +32,7 @@ struct CGRect {
|
||||||
@synthesize frame;
|
@synthesize frame;
|
||||||
|
|
||||||
// CHECK: define internal void @"\01-[I setPosition:]"
|
// CHECK: define internal void @"\01-[I setPosition:]"
|
||||||
// CHECK: call nonnull %class.S* @_ZN1SaSERKS_
|
// CHECK: call dereferenceable({{[0-9]+}}) %class.S* @_ZN1SaSERKS_
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|
||||||
- (void)setFrame:(CGRect)frameRect {}
|
- (void)setFrame:(CGRect)frameRect {}
|
||||||
|
@ -55,7 +55,7 @@ struct CGRect {
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// CHECK-LABEL: define i32 @main
|
// CHECK-LABEL: define i32 @main
|
||||||
// CHECK: call void @_ZN1SC1ERKS_(%class.S* [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* nonnull {{%[a-zA-Z0-9\.]+}})
|
// CHECK: call void @_ZN1SC1ERKS_(%class.S* [[AGGTMP:%[a-zA-Z0-9\.]+]], %class.S* dereferenceable({{[0-9]+}}) {{%[a-zA-Z0-9\.]+}})
|
||||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %class.S*)*)(i8* {{%[a-zA-Z0-9\.]+}}, i8* {{%[a-zA-Z0-9\.]+}}, %class.S* [[AGGTMP]])
|
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %class.S*)*)(i8* {{%[a-zA-Z0-9\.]+}}, i8* {{%[a-zA-Z0-9\.]+}}, %class.S* [[AGGTMP]])
|
||||||
// CHECK-NEXT: ret i32 0
|
// CHECK-NEXT: ret i32 0
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -68,7 +68,7 @@ int main() {
|
||||||
// rdar://8379892
|
// rdar://8379892
|
||||||
// CHECK-LABEL: define void @_Z1fP1A
|
// CHECK-LABEL: define void @_Z1fP1A
|
||||||
// CHECK: call void @_ZN1XC1Ev(%struct.X* [[LVTEMP:%[a-zA-Z0-9\.]+]])
|
// CHECK: call void @_ZN1XC1Ev(%struct.X* [[LVTEMP:%[a-zA-Z0-9\.]+]])
|
||||||
// CHECK: call void @_ZN1XC1ERKS_(%struct.X* [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* nonnull [[LVTEMP]])
|
// CHECK: call void @_ZN1XC1ERKS_(%struct.X* [[AGGTMP:%[a-zA-Z0-9\.]+]], %struct.X* dereferenceable({{[0-9]+}}) [[LVTEMP]])
|
||||||
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.X*)*)({{.*}} %struct.X* [[AGGTMP]])
|
// CHECK: call void bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, %struct.X*)*)({{.*}} %struct.X* [[AGGTMP]])
|
||||||
struct X {
|
struct X {
|
||||||
X();
|
X();
|
||||||
|
|
|
@ -26,7 +26,7 @@ void test0() {
|
||||||
const MyStruct& currentMyStruct = myClass.foo;
|
const MyStruct& currentMyStruct = myClass.foo;
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: [[C:%.*]] = call nonnull %struct.MyStruct* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
// CHECK: [[C:%.*]] = call dereferenceable({{[0-9]+}}) %struct.MyStruct* bitcast (i8* (i8*, i8*, ...)* @objc_msgSend
|
||||||
// CHECK: store %struct.MyStruct* [[C]], %struct.MyStruct** [[D:%.*]]
|
// CHECK: store %struct.MyStruct* [[C]], %struct.MyStruct** [[D:%.*]]
|
||||||
|
|
||||||
namespace test1 {
|
namespace test1 {
|
||||||
|
@ -40,7 +40,7 @@ namespace test1 {
|
||||||
@implementation Test1
|
@implementation Test1
|
||||||
@synthesize prop1 = ivar;
|
@synthesize prop1 = ivar;
|
||||||
@end
|
@end
|
||||||
// CHECK: define internal nonnull [[A:%.*]]* @"\01-[Test1 prop1]"(
|
// CHECK: define internal dereferenceable({{[0-9]+}}) [[A:%.*]]* @"\01-[Test1 prop1]"(
|
||||||
// CHECK: [[SELF:%.*]] = alloca [[TEST1:%.*]]*, align 8
|
// CHECK: [[SELF:%.*]] = alloca [[TEST1:%.*]]*, align 8
|
||||||
// CHECK: [[T0:%.*]] = load [[TEST1]]** [[SELF]]
|
// CHECK: [[T0:%.*]] = load [[TEST1]]** [[SELF]]
|
||||||
// CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST1]]* [[T0]] to i8*
|
// CHECK-NEXT: [[T1:%.*]] = bitcast [[TEST1]]* [[T0]] to i8*
|
||||||
|
@ -49,7 +49,7 @@ namespace test1 {
|
||||||
// CHECK-NEXT: ret [[A]]* [[T3]]
|
// CHECK-NEXT: ret [[A]]* [[T3]]
|
||||||
|
|
||||||
// CHECK: define internal void @"\01-[Test1 setProp1:]"(
|
// CHECK: define internal void @"\01-[Test1 setProp1:]"(
|
||||||
// CHECK: call nonnull [[A]]* @_ZN5test11AaSERKS0_(
|
// CHECK: call dereferenceable({{[0-9]+}}) [[A]]* @_ZN5test11AaSERKS0_(
|
||||||
// CHECK-NEXT: ret void
|
// CHECK-NEXT: ret void
|
||||||
|
|
||||||
// rdar://problem/10497174
|
// rdar://problem/10497174
|
||||||
|
|
|
@ -80,9 +80,9 @@ unsigned testMixedStruct() {
|
||||||
// CHECK: call {{.*}}memcpy{{.*}}(i8* %{{.*}}, i8* bitcast ({{.*}}* @_ZZ15testMixedStructvE1r to i8*), i64 16,
|
// CHECK: call {{.*}}memcpy{{.*}}(i8* %{{.*}}, i8* bitcast ({{.*}}* @_ZZ15testMixedStructvE1r to i8*), i64 16,
|
||||||
ListInt_right r{0, 2};
|
ListInt_right r{0, 2};
|
||||||
|
|
||||||
// CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]* nonnull %[[l]])
|
// CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]* dereferenceable({{[0-9]+}}) %[[l]])
|
||||||
useListInt(l);
|
useListInt(l);
|
||||||
// CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]* nonnull %[[r]])
|
// CHECK: call void @_Z10useListIntR4ListIiE(%[[ListInt]]* dereferenceable({{[0-9]+}}) %[[r]])
|
||||||
useListInt(r);
|
useListInt(r);
|
||||||
|
|
||||||
// CHECK: load i32* bitcast (i8* getelementptr inbounds (i8* bitcast ({{.*}}* @list_left to i8*), i64 8) to i32*)
|
// CHECK: load i32* bitcast (i8* getelementptr inbounds (i8* bitcast ({{.*}}* @list_left to i8*), i64 8) to i32*)
|
||||||
|
|
Loading…
Reference in New Issue