diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-09 21:23:21 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-09 21:23:21 +0000 |
| commit | fdc82ccb3f2b23a89e7002fe8238e1422b00f96a (patch) | |
| tree | f189aa0a3010e0eb212970b8eadf0a8b098985ea /test/CodeGenCXX | |
| parent | 6694ed095d6b27a2c92ec4fd63664fcd88a05749 (diff) | |
Notes
Diffstat (limited to 'test/CodeGenCXX')
| -rw-r--r-- | test/CodeGenCXX/arm.cpp | 9 | ||||
| -rw-r--r-- | test/CodeGenCXX/debug-info-class.cpp | 15 | ||||
| -rw-r--r-- | test/CodeGenCXX/dllexport-ctor-closure.cpp | 82 | ||||
| -rw-r--r-- | test/CodeGenCXX/dllexport.cpp | 51 | ||||
| -rw-r--r-- | test/CodeGenCXX/eh-aggregate-copy-destroy.cpp | 6 | ||||
| -rw-r--r-- | test/CodeGenCXX/exceptions.cpp | 104 | ||||
| -rw-r--r-- | test/CodeGenCXX/goto.cpp | 7 |
7 files changed, 183 insertions, 91 deletions
diff --git a/test/CodeGenCXX/arm.cpp b/test/CodeGenCXX/arm.cpp index d0b896d182da..7eba017e37f2 100644 --- a/test/CodeGenCXX/arm.cpp +++ b/test/CodeGenCXX/arm.cpp @@ -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: @_ZGVZN5test74testEvE1x = internal global i32 0 @@ -156,7 +157,8 @@ namespace test3 { // CHECK: getelementptr {{.*}}, i32 4 // CHECK: bitcast {{.*}} to i32* // CHECK: load - // CHECK: invoke {{.*}} @_ZN5test31AD1Ev + // CHECK98: invoke {{.*}} @_ZN5test31AD1Ev + // CHECK11: call {{.*}} @_ZN5test31AD1Ev // CHECK: call void @_ZdaPv delete [] x; } @@ -168,7 +170,8 @@ namespace test3 { // CHECK: getelementptr {{.*}}, i32 4 // CHECK: bitcast {{.*}} to i32* // CHECK: load - // CHECK: invoke {{.*}} @_ZN5test31AD1Ev + // CHECK98: invoke {{.*}} @_ZN5test31AD1Ev + // CHECK11: call {{.*}} @_ZN5test31AD1Ev // CHECK: call void @_ZdaPv delete [] x; } diff --git a/test/CodeGenCXX/debug-info-class.cpp b/test/CodeGenCXX/debug-info-class.cpp index d572eef68abf..e06ef8dfda5b 100644 --- a/test/CodeGenCXX/debug-info-class.cpp +++ b/test/CodeGenCXX/debug-info-class.cpp @@ -83,12 +83,17 @@ int main(int argc, char **argv) { 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 i686-cygwin -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 %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 -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 -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: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F" diff --git a/test/CodeGenCXX/dllexport-ctor-closure.cpp b/test/CodeGenCXX/dllexport-ctor-closure.cpp new file mode 100644 index 000000000000..4fae7e10e8b6 --- /dev/null +++ b/test/CodeGenCXX/dllexport-ctor-closure.cpp @@ -0,0 +1,82 @@ +// RUN: %clang_cc1 -triple i686-windows-msvc -emit-llvm -std=c++14 \ +// RUN: -fno-threadsafe-statics -fms-extensions -O1 -mconstructor-aliases \ +// RUN: -disable-llvm-passes -o - %s -w -fms-compatibility-version=19.00 | \ +// RUN: FileCheck %s + +struct CtorWithClosure { + __declspec(dllexport) CtorWithClosure(...) {} +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorWithClosure@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat +// CHECK: %[[this_addr:.*]] = alloca %struct.CtorWithClosure*, align 4 +// CHECK: store %struct.CtorWithClosure* %this, %struct.CtorWithClosure** %[[this_addr]], align 4 +// CHECK: %[[this:.*]] = load %struct.CtorWithClosure*, %struct.CtorWithClosure** %[[this_addr]] +// CHECK: call %struct.CtorWithClosure* (%struct.CtorWithClosure*, ...) @"\01??0CtorWithClosure@@QAA@ZZ"(%struct.CtorWithClosure* %[[this]]) +// CHECK: ret void +}; + +struct CtorWithClosureOutOfLine { + __declspec(dllexport) CtorWithClosureOutOfLine(...); +}; +CtorWithClosureOutOfLine::CtorWithClosureOutOfLine(...) {} +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorWithClosureOutOfLine@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat + +#define DELETE_IMPLICIT_MEMBERS(ClassName) \ + ClassName(ClassName &&) = delete; \ + ClassName(ClassName &) = delete; \ + ~ClassName() = delete; \ + ClassName &operator=(ClassName &) = delete + +struct __declspec(dllexport) ClassWithClosure { + DELETE_IMPLICIT_MEMBERS(ClassWithClosure); + ClassWithClosure(...) {} +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FClassWithClosure@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat +// CHECK: %[[this_addr:.*]] = alloca %struct.ClassWithClosure*, align 4 +// CHECK: store %struct.ClassWithClosure* %this, %struct.ClassWithClosure** %[[this_addr]], align 4 +// CHECK: %[[this:.*]] = load %struct.ClassWithClosure*, %struct.ClassWithClosure** %[[this_addr]] +// CHECK: call %struct.ClassWithClosure* (%struct.ClassWithClosure*, ...) @"\01??0ClassWithClosure@@QAA@ZZ"(%struct.ClassWithClosure* %[[this]]) +// CHECK: ret void +}; + +template <typename T> struct TemplateWithClosure { + TemplateWithClosure(int x = sizeof(T)) {} +}; +extern template struct TemplateWithClosure<char>; +template struct __declspec(dllexport) TemplateWithClosure<char>; +extern template struct TemplateWithClosure<int>; +template struct __declspec(dllexport) TemplateWithClosure<int>; + +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_F?$TemplateWithClosure@D@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat +// CHECK: call {{.*}} @"\01??0?$TemplateWithClosure@D@@QAE@H@Z"({{.*}}, i32 1) + +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_F?$TemplateWithClosure@H@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat +// CHECK: call {{.*}} @"\01??0?$TemplateWithClosure@H@@QAE@H@Z"({{.*}}, i32 4) + +struct __declspec(dllexport) NestedOuter { + DELETE_IMPLICIT_MEMBERS(NestedOuter); + NestedOuter(void *p = 0) {} + struct __declspec(dllexport) NestedInner { + DELETE_IMPLICIT_MEMBERS(NestedInner); + NestedInner(void *p = 0) {} + }; +}; + +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FNestedOuter@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FNestedInner@NestedOuter@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat + +struct HasDtor { + ~HasDtor(); + int o; +}; +struct HasImplicitDtor1 { HasDtor o; }; +struct HasImplicitDtor2 { HasDtor o; }; +struct __declspec(dllexport) CtorClosureInline { + CtorClosureInline(const HasImplicitDtor1 &v = {}) {} +}; +struct __declspec(dllexport) CtorClosureOutOfLine { + CtorClosureOutOfLine(const HasImplicitDtor2 &v = {}); +}; +CtorClosureOutOfLine::CtorClosureOutOfLine(const HasImplicitDtor2 &v) {} + +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorClosureInline@@QAEXXZ" +// CHECK-LABEL: define linkonce_odr x86_thiscallcc void @"\01??1HasImplicitDtor1@@QAE@XZ" +// CHECK-LABEL: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorClosureOutOfLine@@QAEXXZ" +// CHECK-LABEL: define linkonce_odr x86_thiscallcc void @"\01??1HasImplicitDtor2@@QAE@XZ" diff --git a/test/CodeGenCXX/dllexport.cpp b/test/CodeGenCXX/dllexport.cpp index 116176e2cb92..fe40bc0aac12 100644 --- a/test/CodeGenCXX/dllexport.cpp +++ b/test/CodeGenCXX/dllexport.cpp @@ -488,57 +488,6 @@ struct S { }; }; -struct CtorWithClosure { - __declspec(dllexport) CtorWithClosure(...) {} -// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_FCtorWithClosure@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat -// M32-DAG: %[[this_addr:.*]] = alloca %struct.CtorWithClosure*, align 4 -// M32-DAG: store %struct.CtorWithClosure* %this, %struct.CtorWithClosure** %[[this_addr]], align 4 -// M32-DAG: %[[this:.*]] = load %struct.CtorWithClosure*, %struct.CtorWithClosure** %[[this_addr]] -// M32-DAG: call %struct.CtorWithClosure* (%struct.CtorWithClosure*, ...) @"\01??0CtorWithClosure@@QAA@ZZ"(%struct.CtorWithClosure* %[[this]]) -// M32-DAG: ret void -}; - -#define DELETE_IMPLICIT_MEMBERS(ClassName) \ - ClassName(ClassName &&) = delete; \ - ClassName(ClassName &) = delete; \ - ~ClassName() = delete; \ - ClassName &operator=(ClassName &) = delete - -struct __declspec(dllexport) ClassWithClosure { - DELETE_IMPLICIT_MEMBERS(ClassWithClosure); - ClassWithClosure(...) {} -// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_FClassWithClosure@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat -// M32-DAG: %[[this_addr:.*]] = alloca %struct.ClassWithClosure*, align 4 -// M32-DAG: store %struct.ClassWithClosure* %this, %struct.ClassWithClosure** %[[this_addr]], align 4 -// M32-DAG: %[[this:.*]] = load %struct.ClassWithClosure*, %struct.ClassWithClosure** %[[this_addr]] -// M32-DAG: call %struct.ClassWithClosure* (%struct.ClassWithClosure*, ...) @"\01??0ClassWithClosure@@QAA@ZZ"(%struct.ClassWithClosure* %[[this]]) -// M32-DAG: ret void -}; - -template <typename T> struct TemplateWithClosure { - TemplateWithClosure(int x = sizeof(T)) {} -}; -extern template struct TemplateWithClosure<char>; -template struct __declspec(dllexport) TemplateWithClosure<char>; -extern template struct TemplateWithClosure<int>; -template struct __declspec(dllexport) TemplateWithClosure<int>; -// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_F?$TemplateWithClosure@D@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat -// M32-DAG: call {{.*}} @"\01??0?$TemplateWithClosure@D@@QAE@H@Z"({{.*}}, i32 1) -// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_F?$TemplateWithClosure@H@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat -// M32-DAG: call {{.*}} @"\01??0?$TemplateWithClosure@H@@QAE@H@Z"({{.*}}, i32 4) - -struct __declspec(dllexport) NestedOuter { - DELETE_IMPLICIT_MEMBERS(NestedOuter); - NestedOuter(void *p = 0) {} - struct __declspec(dllexport) NestedInner { - DELETE_IMPLICIT_MEMBERS(NestedInner); - NestedInner(void *p = 0) {} - }; -}; - -// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_FNestedOuter@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat -// M32-DAG: define weak_odr dllexport x86_thiscallcc void @"\01??_FNestedInner@NestedOuter@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat - template <typename T> struct SomeTemplate { SomeTemplate(T o = T()) : o(o) {} diff --git a/test/CodeGenCXX/eh-aggregate-copy-destroy.cpp b/test/CodeGenCXX/eh-aggregate-copy-destroy.cpp index 29fb5567fb1d..9f0f36c87561 100644 --- a/test/CodeGenCXX/eh-aggregate-copy-destroy.cpp +++ b/test/CodeGenCXX/eh-aggregate-copy-destroy.cpp @@ -1,7 +1,8 @@ // Check that in case of copying an array of memcpy-able objects, their // 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 { int x; @@ -25,7 +26,8 @@ int main () { // CHECK_LABEL: main // CHECK-NOT: call void @_ZN9ThrowCopyC1ERKS_ // CHECK: invoke void @_ZN9ThrowCopyC1ERKS_ - // CHECK: invoke void @_ZN12ImplicitCopyD1Ev + // CHECK98: invoke void @_ZN12ImplicitCopyD1Ev + // CHECK11: call void @_ZN12ImplicitCopyD1Ev Container c2(c1); } catch (...) { diff --git a/test/CodeGenCXX/exceptions.cpp b/test/CodeGenCXX/exceptions.cpp index 86616d1e2c62..e31d6fc2797b 100644 --- a/test/CodeGenCXX/exceptions.cpp +++ b/test/CodeGenCXX/exceptions.cpp @@ -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; @@ -64,7 +65,10 @@ namespace test1 { // CHECK-NEXT: [[T2:%.*]] = load i32, i32* [[T1]], align 4 // CHECK-NEXT: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T2]]) // 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: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]] // CHECK-NEXT: br i1 [[ISACTIVE]] @@ -74,10 +78,10 @@ namespace test1 { // rdar://11904428 // 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 - // CHECK-NEXT: [[T0:%.*]] = call i8* @__cxa_begin_catch(i8* %0) [[NUW:#[0-9]+]] - // CHECK-NEXT: call void @_ZSt9terminatev() [[NR_NUW:#[0-9]+]] - // CHECK-NEXT: unreachable + // CHECK98: define linkonce_odr hidden void @__clang_call_terminate(i8*) [[NI_NR_NUW:#[0-9]+]] comdat + // CHECK98-NEXT: [[T0:%.*]] = call i8* @__cxa_begin_catch(i8* %0) [[NUW:#[0-9]+]] + // CHECK98-NEXT: call void @_ZSt9terminatev() [[NR_NUW:#[0-9]+]] + // CHECK98-NEXT: unreachable A *d() { // CHECK: define [[A:%.*]]* @_ZN5test11dEv() @@ -89,7 +93,10 @@ namespace test1 { // CHECK: [[T1:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T0]]) // CHECK: invoke void @_ZN5test11AC1Ei([[A]]* [[CAST]], i32 [[T1]]) // 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: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]] // CHECK-NEXT: br i1 [[ISACTIVE]] @@ -109,8 +116,13 @@ namespace test1 { // CHECK: [[T3:%.*]] = invoke i32 @_ZN5test11BcviEv([[B]]* [[T2]]) // CHECK: invoke void @_ZN5test11AC1Eii([[A]]* [[CAST]], i32 [[T1]], i32 [[T3]]) // 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: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]] // CHECK-NEXT: br i1 [[ISACTIVE]] @@ -141,8 +153,13 @@ namespace test1 { // CHECK-NEXT: store [[A]]* [[CAST]], [[A]]** [[X]], align 8 // CHECK: invoke void @_ZN5test15makeBEv([[B:%.*]]* sret [[T2:%.*]]) // 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: [[ISACTIVE:%.*]] = load i1, i1* [[ACTIVE]] // CHECK-NEXT: br i1 [[ISACTIVE]] @@ -166,8 +183,11 @@ namespace test2 { // CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]* // CHECK-NEXT: invoke void @_ZN5test21AC1Ei([[A]]* [[CAST]], i32 5) // 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); } } @@ -192,8 +212,11 @@ namespace test3 { // CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[NEW]] to [[A]]* // CHECK-NEXT: invoke void @_ZN5test31AC1Ei([[A]]* [[CAST]], i32 5) // 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); } @@ -235,7 +258,9 @@ namespace test3 { // CHECK-NEXT: br i1 [[ISACTIVE]] // CHECK: [[V0:%.*]] = load i8*, i8** [[SAVED0]] // 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: 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 @_ZN5test51TD1Ev([[T_T]]* [[T]]) - // CHECK: call i8* @__cxa_begin_catch(i8* [[EXN]]) [[NUW]] - // CHECK-NEXT: invoke void @_ZN5test51AD1Ev([[A_T]]* [[A]]) + + // CHECK98: invoke void @_ZN5test51TD1Ev([[T_T]]* [[T]]) + // 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() void test() { try { @@ -380,12 +409,16 @@ namespace test7 { // Destroy the inner A object. // CHECK-NEXT: load i1, i1* [[INNER_A]] // CHECK-NEXT: br i1 - // CHECK: invoke void @_ZN5test71AD1Ev( + + // CHECK98: invoke void @_ZN5test71AD1Ev( + // CHECK11: call void @_ZN5test71AD1Ev( // Destroy the outer A object. // CHECK: load i1, i1* [[OUTER_A]] // CHECK-NEXT: br i1 - // CHECK: invoke void @_ZN5test71AD1Ev( + + // CHECK98: invoke void @_ZN5test71AD1Ev( + // CHECK11: call void @_ZN5test71AD1Ev( return new B(A(), new B(A(), 0)); } @@ -456,8 +489,12 @@ namespace test10 { // CHECK-NEXT: load i8, i8* @_ZN6test108suppressE, align 1 // CHECK-NEXT: trunc // 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: unreachable } @@ -504,7 +541,10 @@ namespace test11 { // CHECK-NEXT: br i1 [[EMPTY]] // CHECK: [[AFTER:%.*]] = phi [[A]]* [ [[CUR]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ] // 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-NEXT: br i1 [[DONE]], // - Next, chain to cleanup for single. @@ -517,13 +557,19 @@ namespace test11 { // CHECK-NEXT: br label // CHECK: [[AFTER:%.*]] = phi [[A]]* [ [[ARRAYEND]], {{%.*}} ], [ [[ELT:%.*]], {{%.*}} ] // 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-NEXT: br i1 [[DONE]], // - Next, chain to cleanup for single. // CHECK: br label // 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: resume // (After this is a terminate landingpad.) @@ -543,7 +589,9 @@ namespace test12 { // CHECK-NEXT: [[CAST:%.*]] = bitcast i8* [[PTR]] to [[A:%.*]]* // CHECK-NEXT: invoke void @_ZN6test121AC1Ev([[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 } diff --git a/test/CodeGenCXX/goto.cpp b/test/CodeGenCXX/goto.cpp index 27bd7affbac9..2f5b7197ca0e 100644 --- a/test/CodeGenCXX/goto.cpp +++ b/test/CodeGenCXX/goto.cpp @@ -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. namespace test0 { @@ -24,7 +25,9 @@ namespace test0 { // CHECK-NEXT: invoke void @_ZN5test01AC1Ev([[A]]* [[TMP]]) // CHECK: invoke void @_ZN5test01VC1ERKNS_1AE([[V]]* [[NEWCAST]], [[A]]* dereferenceable({{[0-9]+}}) [[TMP]]) // 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; try { A z; |
