diff options
Diffstat (limited to 'test/CodeGenCXX/nrvo.cpp')
-rw-r--r-- | test/CodeGenCXX/nrvo.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/test/CodeGenCXX/nrvo.cpp b/test/CodeGenCXX/nrvo.cpp index 195b2b81fa..9ee553673f 100644 --- a/test/CodeGenCXX/nrvo.cpp +++ b/test/CodeGenCXX/nrvo.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -emit-llvm -O1 -o - %s | FileCheck %s // RUN: %clang_cc1 -emit-llvm -fexceptions -o - %s | FileCheck --check-prefix=CHECK-EH %s // Test code generation for the named return value optimization. @@ -15,9 +15,12 @@ X test0() { X x; // CHECK-NOT: call void @_ZN1XD1Ev // CHECK: ret void + // CHECK-EH: br label + // CHECK-EH: call void @_ZN1XD1Ev + // CHECK-EH: br label + // CHECK-EH: invoke void @_ZN1XD1Ev // CHECK-EH: ret void return x; - // CHECK-EH: invoke void @_ZN1XD1Ev } // CHECK: define void @_Z5test1b( @@ -63,3 +66,19 @@ X test3(bool B) { X x; return x; } + +extern "C" void exit(int) throw(); + +// CHECK: define void @_Z5test4b +X test4(bool B) { + { + // CHECK: tail call void @_ZN1XC1Ev + X x; + // CHECK: br i1 + if (B) + return x; + } + // CHECK: tail call void @_ZN1XD1Ev + // CHECK: tail call void @exit(i32 1) + exit(1); +} |