| 1 | // RUN: %clang_cc1 -std=c++1z %s -emit-llvm -o - | FileCheck %s --implicit-check-not=should_not_be_used |
| 2 | |
| 3 | void should_be_used_1(); |
| 4 | void should_be_used_2(); |
| 5 | void should_be_used_3(); |
| 6 | void should_not_be_used(); |
| 7 | |
| 8 | struct A { |
| 9 | constexpr explicit operator bool() const { |
| 10 | return true; |
| 11 | } |
| 12 | }; |
| 13 | |
| 14 | void f() { |
| 15 | if constexpr (false) |
| 16 | should_not_be_used(); |
| 17 | else |
| 18 | should_be_used_1(); |
| 19 | |
| 20 | if constexpr (true || ({ label: false; })) |
| 21 | should_be_used_2(); |
| 22 | else { |
| 23 | goto foo; |
| 24 | foo: should_not_be_used(); |
| 25 | } |
| 26 | if constexpr (A()) |
| 27 | should_be_used_3(); |
| 28 | else |
| 29 | should_not_be_used(); |
| 30 | } |
| 31 | |
| 32 | // CHECK: should_be_used_1 |
| 33 | // CHECK: should_be_used_2 |
| 34 | // CHECK: should_be_used_3 |
| 35 | |