brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 88c432c Raw
72 lines · cpp
1// RUN: %clang_cc1 -std=c++20 -triple=x86_64-windows-msvc -Wno-defaulted-function-deleted -fms-compatibility -fms-extensions -emit-llvm %s -o - | FileCheck %s2 3namespace CWG2369 {4 5namespace Regression1 {6 7template <class, class Up>8using compare_three_way_result_t = Up::type;9 10struct sfinae_assign_base {};11 12template <class Tp>13concept is_derived_from_optional =14    requires(Tp param) { []<class Up>(Up) {}(param); };15 16template <class Tp, class Up>17  requires(is_derived_from_optional<Up> && []<class W>(W) { return true; }(Up()))18compare_three_way_result_t<Tp, Up> operator<=>(Tp, Up);19 20struct RuntimeModeArgs {21  auto operator<=>(const RuntimeModeArgs &) const = default;22  sfinae_assign_base needs_admin;23};24 25RuntimeModeArgs foo() {26  return {};27}28 29// CHECK: ?foo@Regression1@CWG2369@@YA?AURuntimeModeArgs@12@XZ30 31} // namespace Regression132 33namespace Regression2 {34 35template <class _Tp>36constexpr _Tp * __to_address(_Tp *) {37  return nullptr;38}39 40template <class _Ip>41concept contiguous_iterator = requires(_Ip __i) { __to_address(__i); };42 43struct basic_string_view {44  template <contiguous_iterator _It>45  basic_string_view(_It, _It);46};47 48const char *str;49void sv() { basic_string_view(str, str); }50 51void m_fn2() {52  const char __trans_tmp_1 = *__to_address(&__trans_tmp_1);53}54 55// CHECK: define {{.*}} @"??$__to_address@$$CBD@Regression2@CWG2369@@YAPEBDPEBD@Z"56 57} // namespace Regression258 59}60 61namespace GH147650 {62 63template <int> int b;64template <int b>65void f()66    requires requires { [] { (void)b; }; } {}67void test() {68    f<42>();69}70// CHECK-LABEL:define {{.*}} void @"??$f@$0CK@@GH147650@@YAXXZ"()71}72