brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 5a11afb Raw
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