53 lines · cpp
1// RUN: %clang_cc1 -std=c++1z %s -emit-llvm -fblocks -triple x86_64-apple-darwin10 -o - | FileCheck %s --implicit-check-not=should_not_be_used2// RUN: %clang_cc1 -std=c++1z %s -emit-llvm -fblocks -triple x86_64-apple-darwin10 -o - -fexperimental-new-constant-interpreter | FileCheck %s --implicit-check-not=should_not_be_used3 4void should_be_used_1();5void should_be_used_2();6void should_be_used_3();7void should_not_be_used();8 9struct A {10 constexpr explicit operator bool() const {11 return true;12 }13};14 15void f() {16 if constexpr (false)17 should_not_be_used();18 else19 should_be_used_1();20 21 if constexpr (true || ({ label: false; }))22 should_be_used_2();23 else {24 goto foo;25foo: should_not_be_used();26 }27 if constexpr (A())28 should_be_used_3();29 else30 should_not_be_used();31}32 33// CHECK: should_be_used_134// CHECK: should_be_used_235// CHECK: should_be_used_336 37namespace BlockThisCapture {38 void foo();39 struct S {40 template <bool b>41 void m() {42 ^{ if constexpr(b) (void)this; else foo(); }();43 }44 };45 46 void test() {47 S().m<false>();48 }49}50 51// CHECK-LABEL: define internal void @___ZN16BlockThisCapture1S1mILb0EEEvv_block_invoke(52// CHECK: call void @_ZN16BlockThisCapture3fooEv(53