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