1 // RUN: %clang_cc1 -fcxx-exceptions -fexceptions -Wno-unreachable-code -Werror -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s 2 3 int val = 42; 4 int& test1() { 5 return throw val, val; 6 } 7 8 int test2() { 9 return val ? throw val : val; 10 } 11 12 // rdar://problem/8608801 13 void test3() { 14 throw false; 15 } 16 17 // PR10582 18 int test4() { 19 return 1 ? throw val : val; 20 } 21 22 // PR15923 23 int test5(bool x, bool y, int z) { 24 return (x ? throw 1 : y) ? z : throw 2; 25 } 26 // CHECK: define i32 @_Z5test5bbi( 27 // CHECK: br i1 28 // 29 // x.true: 30 // CHECK: call void @__cxa_throw( 31 // CHECK-NEXT: unreachable 32 // 33 // x.false: 34 // CHECK: br i1 35 // 36 // y.true: 37 // CHECK: load i32* 38 // CHECK: br label 39 // 40 // y.false: 41 // CHECK: call void @__cxa_throw( 42 // CHECK-NEXT: unreachable 43 // 44 // end: 45 // CHECK: ret i32 46 47 int test6(bool x, bool y, int z) { 48 return (x ? throw 1 : y) ? z : (throw 2); 49 } 50 // CHECK: define i32 @_Z5test6bbi( 51 // CHECK: br i1 52 // 53 // x.true: 54 // CHECK: call void @__cxa_throw( 55 // CHECK-NEXT: unreachable 56 // 57 // x.false: 58 // CHECK: br i1 59 // 60 // y.true: 61 // CHECK: load i32* 62 // CHECK: br label 63 // 64 // y.false: 65 // CHECK: call void @__cxa_throw( 66 // CHECK-NEXT: unreachable 67 // 68 // end: 69 // CHECK: ret i32 70