blob: d9bf8fdd59ea7f114c61b70db4bb30b99cbdf365 [file] [log] [blame]
Richard Smith469a7472013-05-08 20:32:14 +00001// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -Wno-unreachable-code -Werror -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s
Eli Friedmanf6c175b2009-12-07 20:25:53 +00002
3int val = 42;
4int& test1() {
5 return throw val, val;
6}
7
8int test2() {
9 return val ? throw val : val;
10}
John McCall077dc602010-10-29 08:14:02 +000011
12// rdar://problem/8608801
13void test3() {
14 throw false;
15}
Eli Friedman27ef75b2011-10-15 02:10:40 +000016
17// PR10582
18int test4() {
19 return 1 ? throw val : val;
20}
Richard Smithea852322013-05-07 21:53:22 +000021
22// PR15923
23int test5(bool x, bool y, int z) {
24 return (x ? throw 1 : y) ? z : throw 2;
25}
Stephen Lin43622612013-08-15 06:47:53 +000026// CHECK-LABEL: define i32 @_Z5test5bbi(
Richard Smithea852322013-05-07 21:53:22 +000027// 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
David Majnemera9d4f772013-06-02 08:40:42 +000046
47int test6(bool x, bool y, int z) {
48 return (x ? throw 1 : y) ? z : (throw 2);
49}
Stephen Lin43622612013-08-15 06:47:53 +000050// CHECK-LABEL: define i32 @_Z5test6bbi(
David Majnemera9d4f772013-06-02 08:40:42 +000051// 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