mirror of https://github.com/microsoft/clang.git
[Lit Test] Make tests C++11 compatible - nothrow destructors
In C++11, a destructor's implicit exception-spec is nothrow. The IR for the destructor's invocation changed from invoke to call. Differential Revision: https://reviews.llvm.org/D28425 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@291458 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0982ba044f
commit
c24cbe958c
|
@ -1,4 +1,5 @@
|
||||||
// RUN: %clang_cc1 %s -triple=thumbv7-apple-ios6.0 -fno-use-cxa-atexit -target-abi apcs-gnu -emit-llvm -o - -fexceptions | FileCheck %s
|
// RUN: %clang_cc1 %s -triple=thumbv7-apple-ios6.0 -fno-use-cxa-atexit -target-abi apcs-gnu -emit-llvm -std=gnu++98 -o - -fexceptions | FileCheck -check-prefix=CHECK -check-prefix=CHECK98 %s
|
||||||
|
// RUN: %clang_cc1 %s -triple=thumbv7-apple-ios6.0 -fno-use-cxa-atexit -target-abi apcs-gnu -emit-llvm -std=gnu++11 -o - -fexceptions | FileCheck -check-prefix=CHECK -check-prefix=CHECK11 %s
|
||||||
|
|
||||||
// CHECK: @_ZZN5test74testEvE1x = internal global i32 0, align 4
|
// CHECK: @_ZZN5test74testEvE1x = internal global i32 0, align 4
|
||||||
// CHECK: @_ZGVZN5test74testEvE1x = internal global i32 0
|
// CHECK: @_ZGVZN5test74testEvE1x = internal global i32 0
|
||||||
|
@ -156,7 +157,8 @@ namespace test3 {
|
||||||
// CHECK: getelementptr {{.*}}, i32 4
|
// CHECK: getelementptr {{.*}}, i32 4
|
||||||
// CHECK: bitcast {{.*}} to i32*
|
// CHECK: bitcast {{.*}} to i32*
|
||||||
// CHECK: load
|
// CHECK: load
|
||||||
// CHECK: invoke {{.*}} @_ZN5test31AD1Ev
|
// CHECK98: invoke {{.*}} @_ZN5test31AD1Ev
|
||||||
|
// CHECK11: call {{.*}} @_ZN5test31AD1Ev
|
||||||
// CHECK: call void @_ZdaPv
|
// CHECK: call void @_ZdaPv
|
||||||
delete [] x;
|
delete [] x;
|
||||||
}
|
}
|
||||||
|
@ -168,7 +170,8 @@ namespace test3 {
|
||||||
// CHECK: getelementptr {{.*}}, i32 4
|
// CHECK: getelementptr {{.*}}, i32 4
|
||||||
// CHECK: bitcast {{.*}} to i32*
|
// CHECK: bitcast {{.*}} to i32*
|
||||||
// CHECK: load
|
// CHECK: load
|
||||||
// CHECK: invoke {{.*}} @_ZN5test31AD1Ev
|
// CHECK98: invoke {{.*}} @_ZN5test31AD1Ev
|
||||||
|
// CHECK11: call {{.*}} @_ZN5test31AD1Ev
|
||||||
// CHECK: call void @_ZdaPv
|
// CHECK: call void @_ZdaPv
|
||||||
delete [] x;
|
delete [] x;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,12 +83,17 @@ int main(int argc, char **argv) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm -debug-info-kind=limited -fexceptions %s -o - | FileCheck %s
|
// RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm -debug-info-kind=limited -fexceptions -std=c++98 %s -o - | FileCheck -check-prefix=CHECK98 %s
|
||||||
// RUN: %clang_cc1 -triple i686-cygwin -emit-llvm -debug-info-kind=limited -fexceptions %s -o - | FileCheck %s
|
// RUN: %clang_cc1 -triple i686-cygwin -emit-llvm -debug-info-kind=limited -fexceptions -std=c++98 %s -o - | FileCheck -check-prefix=CHECK98 %s
|
||||||
// RUN: %clang_cc1 -triple armv7l-unknown-linux-gnueabihf -emit-llvm -debug-info-kind=limited -fexceptions %s -o - | FileCheck %s
|
// RUN: %clang_cc1 -triple armv7l-unknown-linux-gnueabihf -emit-llvm -debug-info-kind=limited -fexceptions -std=c++98 %s -o - | FileCheck -check-prefix=CHECK98 %s
|
||||||
|
// RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm -debug-info-kind=limited -fexceptions -std=c++11 %s -o - | FileCheck -check-prefix=CHECK11 %s
|
||||||
|
// RUN: %clang_cc1 -triple i686-cygwin -emit-llvm -debug-info-kind=limited -fexceptions -std=c++11 %s -o - | FileCheck -check-prefix=CHECK11 %s
|
||||||
|
// RUN: %clang_cc1 -triple armv7l-unknown-linux-gnueabihf -emit-llvm -debug-info-kind=limited -fexceptions -std=c++11 %s -o - | FileCheck -check-prefix=CHECK11 %s
|
||||||
|
|
||||||
|
// CHECK98: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b)
|
||||||
|
// CHECK98-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]]
|
||||||
|
// CHECK11: call {{.+}} @_ZN1BD1Ev(%class.B* %b){{.*}}, !dbg ![[EXCEPTLOC:.*]]
|
||||||
|
|
||||||
// CHECK: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b)
|
|
||||||
// CHECK-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]]
|
|
||||||
// CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]]
|
// CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]]
|
||||||
|
|
||||||
// CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F"
|
// CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F"
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
// Check that in case of copying an array of memcpy-able objects, their
|
// Check that in case of copying an array of memcpy-able objects, their
|
||||||
// destructors will be called if an exception is thrown.
|
// destructors will be called if an exception is thrown.
|
||||||
//
|
//
|
||||||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fexceptions -fcxx-exceptions -O0 -fno-elide-constructors -emit-llvm %s -o - | FileCheck %s
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fexceptions -fcxx-exceptions -O0 -fno-elide-constructors -std=c++98 -emit-llvm %s -o - | FileCheck -check-prefix=CHECK -check-prefix=CHECK98 %s
|
||||||
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fexceptions -fcxx-exceptions -O0 -fno-elide-constructors -std=c++11 -emit-llvm %s -o - | FileCheck -check-prefix=CHECK -check-prefix=CHECK11 %s
|
||||||
|
|
||||||
struct ImplicitCopy {
|
struct ImplicitCopy {
|
||||||
int x;
|
int x;
|
||||||
|
@ -25,7 +26,8 @@ int main () {
|
||||||
// CHECK_LABEL: main
|
// CHECK_LABEL: main
|
||||||
// CHECK-NOT: call void @_ZN9ThrowCopyC1ERKS_
|
// CHECK-NOT: call void @_ZN9ThrowCopyC1ERKS_
|
||||||
// CHECK: invoke void @_ZN9ThrowCopyC1ERKS_
|
// CHECK: invoke void @_ZN9ThrowCopyC1ERKS_
|
||||||
// CHECK: invoke void @_ZN12ImplicitCopyD1Ev
|
// CHECK98: invoke void @_ZN12ImplicitCopyD1Ev
|
||||||
|
// CHECK11: call void @_ZN12ImplicitCopyD1Ev
|
||||||
Container c2(c1);
|
Container c2(c1);
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -o - -fcxx-exceptions -fexceptions | FileCheck %s
|
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -std=c++98 -o - -fcxx-exceptions -fexceptions | FileCheck -check-prefix=CHECK -check-prefix=CHECK98 %s
|
||||||
|
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -emit-llvm -std=c++11 -o - -fcxx-exceptions -fexceptions | FileCheck -check-prefix=CHECK -check-prefix=CHECK11 %s
|
||||||
|
|
||||||
typedef __typeof(sizeof(0)) size_t;
|
typedef __typeof(sizeof(0)) size_t;
|
||||||
|
|
||||||
|
@ -64,7 +65,10 @@ namespace test1 {
|
||||||
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* [[T1]], align 4
|
// CHECK-NEXT: [[T2:%.*]] = load i32, i32* [[T1]], align 4
|
||||||
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T2]])
|
// CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T2]])
|
||||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
|
||||||
// CHECK: ret [[A]]* [[CAST]]
|
// CHECK: ret [[A]]* [[CAST]]
|
||||||
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
||||||
|
@ -74,10 +78,10 @@ namespace test1 {
|
||||||
|
|
||||||
// rdar://11904428
|
// rdar://11904428
|
||||||
// Terminate landing pads should call __cxa_begin_catch first.
|
// Terminate landing pads should call __cxa_begin_catch first.
|
||||||
// CHECK: define linkonce_odr hidden void @__clang_call_terminate(i8*) [[NI_NR_NUW:#[0-9]+]] comdat
|
// CHECK98: define linkonce_odr hidden void @__clang_call_terminate(i8*) [[NI_NR_NUW:#[0-9]+]] comdat
|
||||||
// CHECK-NEXT: [[T0:%.*]] = call i8* @__cxa_begin_catch(i8* %0) [[NUW:#[0-9]+]]
|
// CHECK98-NEXT: [[T0:%.*]] = call i8* @__cxa_begin_catch(i8* %0) [[NUW:#[0-9]+]]
|
||||||
// CHECK-NEXT: call void @_ZSt9terminatev() [[NR_NUW:#[0-9]+]]
|
// CHECK98-NEXT: call void @_ZSt9terminatev() [[NR_NUW:#[0-9]+]]
|
||||||
// CHECK-NEXT: unreachable
|
// CHECK98-NEXT: unreachable
|
||||||
|
|
||||||
A *d() {
|
A *d() {
|
||||||
// CHECK: define [[A:%.*]]* @_ZN5test11dEv()
|
// CHECK: define [[A:%.*]]* @_ZN5test11dEv()
|
||||||
|
@ -89,7 +93,10 @@ namespace test1 {
|
||||||
// CHECK: [[T1:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T0]])
|
// CHECK: [[T1:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T0]])
|
||||||
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T1]])
|
// CHECK: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T1]])
|
||||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
|
||||||
// CHECK: ret [[A]]* [[CAST]]
|
// CHECK: ret [[A]]* [[CAST]]
|
||||||
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
||||||
|
@ -109,8 +116,13 @@ namespace test1 {
|
||||||
// CHECK: [[T3:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T2]])
|
// CHECK: [[T3:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T2]])
|
||||||
// CHECK: invoke void @_ZN5test11AC1Eii([[A]]* [[CAST]], i32 [[T1]], i32 [[T3]])
|
// CHECK: invoke void @_ZN5test11AC1Eii([[A]]* [[CAST]], i32 [[T1]], i32 [[T3]])
|
||||||
// CHECK: store i1 false, i1* [[ACTIVE]]
|
// CHECK: store i1 false, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
|
||||||
// CHECK: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
// CHECK98-NEXT: invoke void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
||||||
|
|
||||||
|
// CHECK98: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
// CHECK11: call void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
|
||||||
// CHECK: ret [[A]]* [[CAST]]
|
// CHECK: ret [[A]]* [[CAST]]
|
||||||
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
||||||
|
@ -141,8 +153,13 @@ namespace test1 {
|
||||||
// CHECK-NEXT: store [[A]]* [[CAST]], [[A]]** [[X]], align 8
|
// CHECK-NEXT: store [[A]]* [[CAST]], [[A]]** [[X]], align 8
|
||||||
// CHECK: invoke void @_ZN5test15makeBEv([[B:%.*]]* sret [[T2:%.*]])
|
// CHECK: invoke void @_ZN5test15makeBEv([[B:%.*]]* sret [[T2:%.*]])
|
||||||
// CHECK: [[RET:%.*]] = load [[A]]*, [[A]]** [[X]], align 8
|
// CHECK: [[RET:%.*]] = load [[A]]*, [[A]]** [[X]], align 8
|
||||||
// CHECK: invoke void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
|
||||||
// CHECK: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
// CHECK98: invoke void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
||||||
|
// CHECK11: call void @_ZN5test11BD1Ev([[B]]* [[T2]])
|
||||||
|
|
||||||
|
// CHECK98: invoke void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
// CHECK11: call void @_ZN5test11BD1Ev([[B]]* [[T0]])
|
||||||
|
|
||||||
// CHECK: ret [[A]]* [[RET]]
|
// CHECK: ret [[A]]* [[RET]]
|
||||||
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
// CHECK: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]]
|
||||||
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
||||||
|
@ -166,8 +183,11 @@ namespace test2 {
|
||||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||||
// CHECK-NEXT: invoke void @_ZN5test21AC1Ei([[A]]* [[CAST]], i32 5)
|
// CHECK-NEXT: invoke void @_ZN5test21AC1Ei([[A]]* [[CAST]], i32 5)
|
||||||
// CHECK: ret [[A]]* [[CAST]]
|
// CHECK: ret [[A]]* [[CAST]]
|
||||||
// CHECK: invoke void @_ZN5test21AdlEPvm(i8* [[NEW]], i64 8)
|
|
||||||
// CHECK: call void @__clang_call_terminate(i8* {{%.*}}) [[NR_NUW]]
|
// CHECK98: invoke void @_ZN5test21AdlEPvm(i8* [[NEW]], i64 8)
|
||||||
|
// CHECK11: call void @_ZN5test21AdlEPvm(i8* [[NEW]], i64 8)
|
||||||
|
|
||||||
|
// CHECK98: call void @__clang_call_terminate(i8* {{%.*}}) [[NR_NUW]]
|
||||||
return new A(5);
|
return new A(5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -192,8 +212,11 @@ namespace test3 {
|
||||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]*
|
||||||
// CHECK-NEXT: invoke void @_ZN5test31AC1Ei([[A]]* [[CAST]], i32 5)
|
// CHECK-NEXT: invoke void @_ZN5test31AC1Ei([[A]]* [[CAST]], i32 5)
|
||||||
// CHECK: ret [[A]]* [[CAST]]
|
// CHECK: ret [[A]]* [[CAST]]
|
||||||
// CHECK: invoke void @_ZN5test31AdlEPvS1_d(i8* [[NEW]], i8* [[FOO]], double [[BAR]])
|
|
||||||
// CHECK: call void @__clang_call_terminate(i8* {{%.*}}) [[NR_NUW]]
|
// CHECK98: invoke void @_ZN5test31AdlEPvS1_d(i8* [[NEW]], i8* [[FOO]], double [[BAR]])
|
||||||
|
// CHECK11: call void @_ZN5test31AdlEPvS1_d(i8* [[NEW]], i8* [[FOO]], double [[BAR]])
|
||||||
|
|
||||||
|
// CHECK98: call void @__clang_call_terminate(i8* {{%.*}}) [[NR_NUW]]
|
||||||
return new(foo(),bar()) A(5);
|
return new(foo(),bar()) A(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,7 +258,9 @@ namespace test3 {
|
||||||
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
// CHECK-NEXT: br i1 [[ISACTIVE]]
|
||||||
// CHECK: [[V0:%.*]] = load i8*, i8** [[SAVED0]]
|
// CHECK: [[V0:%.*]] = load i8*, i8** [[SAVED0]]
|
||||||
// CHECK-NEXT: [[V1:%.*]] = load i8*, i8** [[SAVED1]]
|
// CHECK-NEXT: [[V1:%.*]] = load i8*, i8** [[SAVED1]]
|
||||||
// CHECK-NEXT: invoke void @_ZN5test31AdlEPvS1_d(i8* [[V0]], i8* [[V1]], double [[CONST]])
|
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN5test31AdlEPvS1_d(i8* [[V0]], i8* [[V1]], double [[CONST]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN5test31AdlEPvS1_d(i8* [[V0]], i8* [[V1]], double [[CONST]])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,9 +308,13 @@ namespace test5 {
|
||||||
// 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]]* dereferenceable({{[0-9]+}}) [[SRC]], [[T_T]]* dereferenceable({{[0-9]+}}) [[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: call i8* @__cxa_begin_catch(i8* [[EXN]]) [[NUW]]
|
// CHECK98: invoke void @_ZN5test51TD1Ev([[T_T]]* [[T]])
|
||||||
// CHECK-NEXT: invoke void @_ZN5test51AD1Ev([[A_T]]* [[A]])
|
// CHECK11: call void @_ZN5test51TD1Ev([[T_T]]* [[T]])
|
||||||
|
|
||||||
|
// CHECK98: call i8* @__cxa_begin_catch(i8* [[EXN]]) [[NUW]]
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN5test51AD1Ev([[A_T]]* [[A]])
|
||||||
|
|
||||||
// CHECK: call void @__cxa_end_catch()
|
// CHECK: call void @__cxa_end_catch()
|
||||||
void test() {
|
void test() {
|
||||||
try {
|
try {
|
||||||
|
@ -380,12 +409,16 @@ namespace test7 {
|
||||||
// Destroy the inner A object.
|
// Destroy the inner A object.
|
||||||
// CHECK-NEXT: load i1, i1* [[INNER_A]]
|
// CHECK-NEXT: load i1, i1* [[INNER_A]]
|
||||||
// CHECK-NEXT: br i1
|
// CHECK-NEXT: br i1
|
||||||
// CHECK: invoke void @_ZN5test71AD1Ev(
|
|
||||||
|
// CHECK98: invoke void @_ZN5test71AD1Ev(
|
||||||
|
// CHECK11: call void @_ZN5test71AD1Ev(
|
||||||
|
|
||||||
// Destroy the outer A object.
|
// Destroy the outer A object.
|
||||||
// CHECK: load i1, i1* [[OUTER_A]]
|
// CHECK: load i1, i1* [[OUTER_A]]
|
||||||
// CHECK-NEXT: br i1
|
// CHECK-NEXT: br i1
|
||||||
// CHECK: invoke void @_ZN5test71AD1Ev(
|
|
||||||
|
// CHECK98: invoke void @_ZN5test71AD1Ev(
|
||||||
|
// CHECK11: call void @_ZN5test71AD1Ev(
|
||||||
|
|
||||||
return new B(A(), new B(A(), 0));
|
return new B(A(), new B(A(), 0));
|
||||||
}
|
}
|
||||||
|
@ -456,8 +489,12 @@ namespace test10 {
|
||||||
// CHECK-NEXT: load i8, i8* @_ZN6test108suppressE, align 1
|
// CHECK-NEXT: load i8, i8* @_ZN6test108suppressE, align 1
|
||||||
// CHECK-NEXT: trunc
|
// CHECK-NEXT: trunc
|
||||||
// CHECK-NEXT: br i1
|
// CHECK-NEXT: br i1
|
||||||
// CHECK: call void @__cxa_end_catch()
|
|
||||||
// CHECK-NEXT: br label
|
// CHECK98: call void @__cxa_end_catch()
|
||||||
|
// CHECK98-NEXT: br label
|
||||||
|
// CHECK11: invoke void @__cxa_end_catch()
|
||||||
|
// CHECK11-NEXT: to label
|
||||||
|
|
||||||
// CHECK: invoke void @__cxa_rethrow()
|
// CHECK: invoke void @__cxa_rethrow()
|
||||||
// CHECK: unreachable
|
// CHECK: unreachable
|
||||||
}
|
}
|
||||||
|
@ -504,7 +541,10 @@ namespace test11 {
|
||||||
// CHECK-NEXT: br i1 [[EMPTY]]
|
// CHECK-NEXT: br i1 [[EMPTY]]
|
||||||
// CHECK: [[AFTER:%.*]] = phi [[A]]* [ [[CUR]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ]
|
// CHECK: [[AFTER:%.*]] = phi [[A]]* [ [[CUR]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ]
|
||||||
// CHECK-NEXT: [[ELT]] = getelementptr inbounds [[A]], [[A]]* [[AFTER]], i64 -1
|
// CHECK-NEXT: [[ELT]] = getelementptr inbounds [[A]], [[A]]* [[AFTER]], i64 -1
|
||||||
// CHECK-NEXT: invoke void @_ZN6test111AD1Ev([[A]]* [[ELT]])
|
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN6test111AD1Ev([[A]]* [[ELT]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN6test111AD1Ev([[A]]* [[ELT]])
|
||||||
|
|
||||||
// CHECK: [[DONE:%.*]] = icmp eq [[A]]* [[ELT]], [[ARRAYBEGIN]]
|
// CHECK: [[DONE:%.*]] = icmp eq [[A]]* [[ELT]], [[ARRAYBEGIN]]
|
||||||
// CHECK-NEXT: br i1 [[DONE]],
|
// CHECK-NEXT: br i1 [[DONE]],
|
||||||
// - Next, chain to cleanup for single.
|
// - Next, chain to cleanup for single.
|
||||||
|
@ -517,13 +557,19 @@ namespace test11 {
|
||||||
// CHECK-NEXT: br label
|
// CHECK-NEXT: br label
|
||||||
// CHECK: [[AFTER:%.*]] = phi [[A]]* [ [[ARRAYEND]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ]
|
// CHECK: [[AFTER:%.*]] = phi [[A]]* [ [[ARRAYEND]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ]
|
||||||
// CHECK-NEXT: [[ELT]] = getelementptr inbounds [[A]], [[A]]* [[AFTER]], i64 -1
|
// CHECK-NEXT: [[ELT]] = getelementptr inbounds [[A]], [[A]]* [[AFTER]], i64 -1
|
||||||
// CHECK-NEXT: invoke void @_ZN6test111AD1Ev([[A]]* [[ELT]])
|
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN6test111AD1Ev([[A]]* [[ELT]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN6test111AD1Ev([[A]]* [[ELT]])
|
||||||
|
|
||||||
// CHECK: [[DONE:%.*]] = icmp eq [[A]]* [[ELT]], [[ARRAYBEGIN]]
|
// CHECK: [[DONE:%.*]] = icmp eq [[A]]* [[ELT]], [[ARRAYBEGIN]]
|
||||||
// CHECK-NEXT: br i1 [[DONE]],
|
// CHECK-NEXT: br i1 [[DONE]],
|
||||||
// - Next, chain to cleanup for single.
|
// - Next, chain to cleanup for single.
|
||||||
// CHECK: br label
|
// CHECK: br label
|
||||||
// Finally, the cleanup for single.
|
// Finally, the cleanup for single.
|
||||||
// CHECK: invoke void @_ZN6test111AD1Ev([[A]]* [[SINGLE]])
|
|
||||||
|
// CHECK98: invoke void @_ZN6test111AD1Ev([[A]]* [[SINGLE]])
|
||||||
|
// CHECK11: call void @_ZN6test111AD1Ev([[A]]* [[SINGLE]])
|
||||||
|
|
||||||
// CHECK: br label
|
// CHECK: br label
|
||||||
// CHECK: resume
|
// CHECK: resume
|
||||||
// (After this is a terminate landingpad.)
|
// (After this is a terminate landingpad.)
|
||||||
|
@ -543,7 +589,9 @@ namespace test12 {
|
||||||
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[PTR]] to [[A:%.*]]*
|
// CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[PTR]] to [[A:%.*]]*
|
||||||
// CHECK-NEXT: invoke void @_ZN6test121AC1Ev([[A]]* [[CAST]])
|
// CHECK-NEXT: invoke void @_ZN6test121AC1Ev([[A]]* [[CAST]])
|
||||||
// CHECK: ret [[A]]* [[CAST]]
|
// CHECK: ret [[A]]* [[CAST]]
|
||||||
// CHECK: invoke void @_ZN6test121AdlEPvS1_(i8* [[PTR]], i8* [[PTR]])
|
|
||||||
|
// CHECK98: invoke void @_ZN6test121AdlEPvS1_(i8* [[PTR]], i8* [[PTR]])
|
||||||
|
// CHECK11: call void @_ZN6test121AdlEPvS1_(i8* [[PTR]], i8* [[PTR]])
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: attributes [[NI_NR_NUW]] = { noinline noreturn nounwind }
|
// CHECK98: attributes [[NI_NR_NUW]] = { noinline noreturn nounwind }
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -fcxx-exceptions -fexceptions -emit-llvm -o - | FileCheck %s
|
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -fcxx-exceptions -fexceptions -emit-llvm -std=c++98 -o - | FileCheck -check-prefix=CHECK -check-prefix=CHECK98 %s
|
||||||
|
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -fcxx-exceptions -fexceptions -emit-llvm -std=c++11 -o - | FileCheck -check-prefix=CHECK -check-prefix=CHECK11 %s
|
||||||
|
|
||||||
// Reduced from a crash on boost::interprocess's node_allocator_test.cpp.
|
// Reduced from a crash on boost::interprocess's node_allocator_test.cpp.
|
||||||
namespace test0 {
|
namespace test0 {
|
||||||
|
@ -24,7 +25,9 @@ namespace test0 {
|
||||||
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]])
|
// CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]])
|
||||||
// CHECK: invoke void @_ZN5test01VC1ERKNS_1AE([[V]]* [[NEWCAST]], [[A]]* dereferenceable({{[0-9]+}}) [[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]])
|
|
||||||
|
// CHECK98-NEXT: invoke void @_ZN5test01AD1Ev([[A]]* [[TMP]])
|
||||||
|
// CHECK11-NEXT: call void @_ZN5test01AD1Ev([[A]]* [[TMP]])
|
||||||
A y;
|
A y;
|
||||||
try {
|
try {
|
||||||
A z;
|
A z;
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -x c++ -emit-llvm %s -o - | FileCheck %s
|
// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -x c++ -emit-llvm %s -o - | FileCheck %s
|
||||||
|
// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -x c++ -emit-llvm -std=c++98 %s -o - | FileCheck %s
|
||||||
|
// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -x c++ -emit-llvm -std=c++11 %s -o - | FileCheck %s
|
||||||
// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -debug-info-kind=line-tables-only -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=TERM_DEBUG
|
// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -fexceptions -fcxx-exceptions -debug-info-kind=line-tables-only -x c++ -emit-llvm %s -o - | FileCheck %s --check-prefix=TERM_DEBUG
|
||||||
// expected-no-diagnostics
|
// expected-no-diagnostics
|
||||||
|
|
||||||
|
@ -21,14 +23,15 @@ void parallel_atomic_ewc() {
|
||||||
// CHECK: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
// CHECK: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
// CHECK: [[SCALAR_VAL:%.+]] = load atomic i32, i32* [[SCALAR_ADDR]] monotonic
|
// CHECK: [[SCALAR_VAL:%.+]] = load atomic i32, i32* [[SCALAR_ADDR]] monotonic
|
||||||
// CHECK: store i32 [[SCALAR_VAL]], i32* @b
|
// CHECK: store i32 [[SCALAR_VAL]], i32* @b
|
||||||
// CHECK: invoke void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
// CHECK98: invoke void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
|
// CHECK11: call void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
#pragma omp atomic read
|
#pragma omp atomic read
|
||||||
b = St().get();
|
b = St().get();
|
||||||
// CHECK-DAG: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
// CHECK-DAG: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
||||||
// CHECK-DAG: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
// CHECK-DAG: [[SCALAR_ADDR:%.+]] = invoke dereferenceable(4) i32* @_ZN2St3getEv(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
// CHECK-DAG: [[B_VAL:%.+]] = load i32, i32* @b
|
// CHECK-DAG: [[B_VAL:%.+]] = load i32, i32* @b
|
||||||
// CHECK: store atomic i32 [[B_VAL]], i32* [[SCALAR_ADDR]] monotonic
|
// CHECK: store atomic i32 [[B_VAL]], i32* [[SCALAR_ADDR]] monotonic
|
||||||
// CHECK: invoke void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
// CHECK: {{invoke|call}} void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
#pragma omp atomic write
|
#pragma omp atomic write
|
||||||
St().get() = b;
|
St().get() = b;
|
||||||
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
// CHECK: invoke void @_ZN2StC1Ev(%struct.St* [[TEMP_ST_ADDR:%.+]])
|
||||||
|
@ -46,7 +49,7 @@ void parallel_atomic_ewc() {
|
||||||
// CHECK: [[COND:%.+]] = extractvalue { i32, i1 } [[RES]], 1
|
// CHECK: [[COND:%.+]] = extractvalue { i32, i1 } [[RES]], 1
|
||||||
// CHECK: br i1 [[COND]], label %[[OMP_DONE:.+]], label %[[OMP_UPDATE]]
|
// CHECK: br i1 [[COND]], label %[[OMP_DONE:.+]], label %[[OMP_UPDATE]]
|
||||||
// CHECK: [[OMP_DONE]]
|
// CHECK: [[OMP_DONE]]
|
||||||
// CHECK: invoke void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
// CHECK: {{invoke|call}} void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
#pragma omp atomic
|
#pragma omp atomic
|
||||||
St().get() %= b;
|
St().get() %= b;
|
||||||
#pragma omp atomic
|
#pragma omp atomic
|
||||||
|
@ -67,7 +70,7 @@ void parallel_atomic_ewc() {
|
||||||
// CHECK: br i1 [[COND]], label %[[OMP_DONE:.+]], label %[[OMP_UPDATE]]
|
// CHECK: br i1 [[COND]], label %[[OMP_DONE:.+]], label %[[OMP_UPDATE]]
|
||||||
// CHECK: [[OMP_DONE]]
|
// CHECK: [[OMP_DONE]]
|
||||||
// CHECK: store i32 [[NEW_CALC_VAL]], i32* @a,
|
// CHECK: store i32 [[NEW_CALC_VAL]], i32* @a,
|
||||||
// CHECK: invoke void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
// CHECK: {{invoke|call}} void @_ZN2StD1Ev(%struct.St* [[TEMP_ST_ADDR]])
|
||||||
#pragma omp atomic capture
|
#pragma omp atomic capture
|
||||||
a = St().get() %= b;
|
a = St().get() %= b;
|
||||||
}
|
}
|
||||||
|
|
|
@ -275,7 +275,7 @@ S1 arr_x[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };
|
||||||
// CHECK: {{.*}}[[ARR_LOOP]]{{.*}}
|
// CHECK: {{.*}}[[ARR_LOOP]]{{.*}}
|
||||||
// CHECK-NEXT: [[ARR_ELEMENTPAST:%.*]] = phi [[S1]]* [ [[ARR_CUR]], {{.*}} ], [ [[ARR_ELEMENT:%.*]], {{.*}} ]
|
// CHECK-NEXT: [[ARR_ELEMENTPAST:%.*]] = phi [[S1]]* [ [[ARR_CUR]], {{.*}} ], [ [[ARR_ELEMENT:%.*]], {{.*}} ]
|
||||||
// CHECK-NEXT: [[ARR_ELEMENT:%.*]] = getelementptr inbounds [[S1]], [[S1]]* [[ARR_ELEMENTPAST]], i{{.*}} -1
|
// CHECK-NEXT: [[ARR_ELEMENT:%.*]] = getelementptr inbounds [[S1]], [[S1]]* [[ARR_ELEMENTPAST]], i{{.*}} -1
|
||||||
// CHECK-NEXT: invoke {{.*}} [[S1_DTOR]]([[S1]]* [[ARR_ELEMENT]])
|
// CHECK-NEXT: {{call|invoke}} {{.*}} [[S1_DTOR]]([[S1]]* [[ARR_ELEMENT]])
|
||||||
// CHECK: [[ARR_DONE:%.*]] = icmp eq [[S1]]* [[ARR_ELEMENT]], [[ARR_BEGIN]]
|
// CHECK: [[ARR_DONE:%.*]] = icmp eq [[S1]]* [[ARR_ELEMENT]], [[ARR_BEGIN]]
|
||||||
// CHECK-NEXT: br i1 [[ARR_DONE]], label %[[ARR_EXIT:.*]], label %[[ARR_LOOP]]
|
// CHECK-NEXT: br i1 [[ARR_DONE]], label %[[ARR_EXIT:.*]], label %[[ARR_LOOP]]
|
||||||
// CHECK: {{.*}}[[ARR_EXIT]]{{.*}}
|
// CHECK: {{.*}}[[ARR_EXIT]]{{.*}}
|
||||||
|
|
Loading…
Reference in New Issue