Home | History | Annotate | Download | only in CodeGenCXX
      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