Clang Project

clang_source_code/test/CodeGenCXX/cxx1z-constexpr-if.cpp
1// RUN: %clang_cc1 -std=c++1z %s -emit-llvm -o - | FileCheck %s --implicit-check-not=should_not_be_used
2
3void should_be_used_1();
4void should_be_used_2();
5void should_be_used_3();
6void should_not_be_used();
7
8struct A {
9  constexpr explicit operator bool() const {
10    return true;
11  }
12};
13
14void 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;
24foo: 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