brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 34103a1 Raw
65 lines · cpp
1// RUN: %clang_cc1 -std=c++17 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s2 3namespace LambdaContainingLocalClasses {4 5template <typename F>6void GH59734() {7  [&](auto param) {8    struct Guard {9      Guard() {10        // Check that we're able to create DeclRefExpr to param at this point.11        static_assert(__is_same(decltype(param), int), "");12      }13      ~Guard() {14        static_assert(__is_same(decltype(param), int), "");15      }16      operator decltype(param)() {17        return decltype(param)();18      }19    };20    Guard guard;21    param = guard;22  }(42);23}24 25// Guard::Guard():26// CHECK-DAG: define {{.*}} @_ZZZN28LambdaContainingLocalClasses7GH59734IiEEvvENKUlT_E_clIiEEDaS1_EN5GuardC2Ev27// Guard::operator int():28// CHECK-DAG: define {{.*}} @_ZZZN28LambdaContainingLocalClasses7GH59734IiEEvvENKUlT_E_clIiEEDaS1_EN5GuardcviEv29// Guard::~Guard():30// CHECK-DAG: define {{.*}} @_ZZZN28LambdaContainingLocalClasses7GH59734IiEEvvENKUlT_E_clIiEEDaS1_EN5GuardD2Ev31 32struct S {};33 34template <class T = void>35auto GH132208 = [](auto param) {36  struct OnScopeExit {37    OnScopeExit() {38      static_assert(__is_same(decltype(param), S), "");39    }40    ~OnScopeExit() {41      static_assert(__is_same(decltype(param), S), "");42    }43    operator decltype(param)() {44      return decltype(param)();45    }46  } pending;47 48  param = pending;49};50 51void bar() {52  GH59734<int>();53 54  GH132208<void>(S{});55}56 57// OnScopeExit::OnScopeExit():58// CHECK-DAG: define {{.*}} @_ZZNK28LambdaContainingLocalClasses8GH132208IvEMUlT_E_clINS_1SEEEDaS2_EN11OnScopeExitC2Ev59// OnScopeExit::operator S():60// CHECK-DAG: define {{.*}} @_ZZNK28LambdaContainingLocalClasses8GH132208IvEMUlT_E_clINS_1SEEEDaS2_EN11OnScopeExitcvS5_Ev61// OnScopeExit::~OnScopeExit():62// CHECK-DAG: define {{.*}} @_ZZNK28LambdaContainingLocalClasses8GH132208IvEMUlT_E_clINS_1SEEEDaS2_EN11OnScopeExitD2Ev63 64} // namespace LambdaContainingLocalClasses65