17ba376be6361bafbb1d26cfa03f976d0161cc639Richard Smith// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -Wno-unreachable-code -Werror -triple x86_64-linux-gnu -emit-llvm -o - %s | FileCheck %s 248daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedman 348daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedmanint val = 42; 448daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedmanint& test1() { 548daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedman return throw val, val; 648daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedman} 748daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedman 848daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedmanint test2() { 948daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedman return val ? throw val : val; 1048daf59c9f52856ca80074f1f5a30aa29c235726Eli Friedman} 1114e1bc9201681a52e06b0544ee800b422f6f3efeJohn McCall 1214e1bc9201681a52e06b0544ee800b422f6f3efeJohn McCall// rdar://problem/8608801 1314e1bc9201681a52e06b0544ee800b422f6f3efeJohn McCallvoid test3() { 1414e1bc9201681a52e06b0544ee800b422f6f3efeJohn McCall throw false; 1514e1bc9201681a52e06b0544ee800b422f6f3efeJohn McCall} 16c8645e38bfe5ab46e424b7aaca53c064105c4265Eli Friedman 17c8645e38bfe5ab46e424b7aaca53c064105c4265Eli Friedman// PR10582 18c8645e38bfe5ab46e424b7aaca53c064105c4265Eli Friedmanint test4() { 19c8645e38bfe5ab46e424b7aaca53c064105c4265Eli Friedman return 1 ? throw val : val; 20c8645e38bfe5ab46e424b7aaca53c064105c4265Eli Friedman} 214c71b8cded575b0cfc133c5da4502ca613982094Richard Smith 224c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// PR15923 234c71b8cded575b0cfc133c5da4502ca613982094Richard Smithint test5(bool x, bool y, int z) { 244c71b8cded575b0cfc133c5da4502ca613982094Richard Smith return (x ? throw 1 : y) ? z : throw 2; 254c71b8cded575b0cfc133c5da4502ca613982094Richard Smith} 264c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: define i32 @_Z5test5bbi( 274c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: br i1 284c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// 294c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// x.true: 304c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: call void @__cxa_throw( 314c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK-NEXT: unreachable 324c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// 334c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// x.false: 344c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: br i1 354c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// 364c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// y.true: 374c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: load i32* 384c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: br label 394c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// 404c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// y.false: 414c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: call void @__cxa_throw( 424c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK-NEXT: unreachable 434c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// 444c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// end: 454c71b8cded575b0cfc133c5da4502ca613982094Richard Smith// CHECK: ret i32 46c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer 47c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemerint test6(bool x, bool y, int z) { 48c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer return (x ? throw 1 : y) ? z : (throw 2); 49c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer} 50c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: define i32 @_Z5test6bbi( 51c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: br i1 52c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// 53c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// x.true: 54c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: call void @__cxa_throw( 55c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK-NEXT: unreachable 56c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// 57c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// x.false: 58c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: br i1 59c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// 60c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// y.true: 61c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: load i32* 62c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: br label 63c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// 64c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// y.false: 65c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: call void @__cxa_throw( 66c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK-NEXT: unreachable 67c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// 68c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// end: 69c063cb1e1a2e4b76f27762fcf56b4ba2ede8f0a9David Majnemer// CHECK: ret i32 70