CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
293 lines
11 KiB
C++
293 lines
11 KiB
C++
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s
|
|
// expected-no-diagnostics
|
|
namespace A {
|
|
template <typename T>
|
|
concept C = true;
|
|
|
|
template <typename T>
|
|
requires C<T> && C<T>
|
|
void f() {}
|
|
|
|
template <typename T>
|
|
requires C<T> && true
|
|
void f() {}
|
|
|
|
void test() { f<int>(); };
|
|
}
|
|
|
|
namespace B {
|
|
template <typename T>
|
|
concept A = true;
|
|
template <typename T>
|
|
concept B = true;
|
|
|
|
template <typename T>
|
|
requires (A<T> && B<T>)
|
|
constexpr int f() { return 0; }
|
|
|
|
template <typename T>
|
|
requires (A<T> || B<T>)
|
|
constexpr int f() { return 1; }
|
|
|
|
static_assert(f<int>() == 0);
|
|
}
|
|
|
|
namespace GH122581 {
|
|
// Test that producing a Conjunctive Normal Form
|
|
// does not blow up exponentially.
|
|
// i.e, this should terminate reasonably quickly
|
|
// within a small memory footprint
|
|
template <typename T> concept C0 = true;
|
|
template <typename T> concept C1 = true;
|
|
template <typename T> concept C2 = true;
|
|
template <typename T> concept C3 = true;
|
|
template <typename T> concept C4 = true;
|
|
template <typename T> concept C5 = true;
|
|
template <typename T> concept C6 = true;
|
|
template <typename T> concept C7 = true;
|
|
template <typename T> concept C8 = true;
|
|
template <typename T> concept C9 = true;
|
|
|
|
template <typename T>
|
|
concept Majority8 =
|
|
(C0<T> && C1<T> && C2<T> && C3<T>) ||
|
|
(C0<T> && C1<T> && C2<T> && C4<T>) ||
|
|
(C0<T> && C1<T> && C2<T> && C5<T>) ||
|
|
(C0<T> && C1<T> && C2<T> && C6<T>) ||
|
|
(C0<T> && C1<T> && C2<T> && C7<T>) ||
|
|
(C0<T> && C1<T> && C3<T> && C4<T>) ||
|
|
(C0<T> && C1<T> && C3<T> && C5<T>) ||
|
|
(C0<T> && C1<T> && C3<T> && C6<T>) ||
|
|
(C0<T> && C1<T> && C3<T> && C7<T>) ||
|
|
(C0<T> && C1<T> && C4<T> && C5<T>) ||
|
|
(C0<T> && C1<T> && C4<T> && C6<T>) ||
|
|
(C0<T> && C1<T> && C4<T> && C7<T>) ||
|
|
(C0<T> && C1<T> && C5<T> && C6<T>) ||
|
|
(C0<T> && C1<T> && C5<T> && C7<T>) ||
|
|
(C0<T> && C1<T> && C6<T> && C7<T>) ||
|
|
(C0<T> && C2<T> && C3<T> && C4<T>) ||
|
|
(C0<T> && C2<T> && C3<T> && C5<T>) ||
|
|
(C0<T> && C2<T> && C3<T> && C6<T>) ||
|
|
(C0<T> && C2<T> && C3<T> && C7<T>) ||
|
|
(C0<T> && C2<T> && C4<T> && C5<T>) ||
|
|
(C0<T> && C2<T> && C4<T> && C6<T>) ||
|
|
(C0<T> && C2<T> && C4<T> && C7<T>) ||
|
|
(C0<T> && C2<T> && C5<T> && C6<T>) ||
|
|
(C0<T> && C2<T> && C5<T> && C7<T>) ||
|
|
(C0<T> && C2<T> && C6<T> && C7<T>) ||
|
|
(C0<T> && C3<T> && C4<T> && C5<T>) ||
|
|
(C0<T> && C3<T> && C4<T> && C6<T>) ||
|
|
(C0<T> && C3<T> && C4<T> && C7<T>) ||
|
|
(C0<T> && C3<T> && C5<T> && C6<T>) ||
|
|
(C0<T> && C3<T> && C5<T> && C7<T>) ||
|
|
(C0<T> && C3<T> && C6<T> && C7<T>) ||
|
|
(C0<T> && C4<T> && C5<T> && C6<T>) ||
|
|
(C0<T> && C4<T> && C5<T> && C7<T>) ||
|
|
(C0<T> && C4<T> && C6<T> && C7<T>) ||
|
|
(C0<T> && C5<T> && C6<T> && C7<T>) ||
|
|
(C1<T> && C2<T> && C3<T> && C4<T>) ||
|
|
(C1<T> && C2<T> && C3<T> && C5<T>) ||
|
|
(C1<T> && C2<T> && C3<T> && C6<T>) ||
|
|
(C1<T> && C2<T> && C3<T> && C7<T>) ||
|
|
(C1<T> && C2<T> && C4<T> && C5<T>) ||
|
|
(C1<T> && C2<T> && C4<T> && C6<T>) ||
|
|
(C1<T> && C2<T> && C4<T> && C7<T>) ||
|
|
(C1<T> && C2<T> && C5<T> && C6<T>) ||
|
|
(C1<T> && C2<T> && C5<T> && C7<T>) ||
|
|
(C1<T> && C2<T> && C6<T> && C7<T>) ||
|
|
(C1<T> && C3<T> && C4<T> && C5<T>) ||
|
|
(C1<T> && C3<T> && C4<T> && C6<T>) ||
|
|
(C1<T> && C3<T> && C4<T> && C7<T>) ||
|
|
(C1<T> && C3<T> && C5<T> && C6<T>) ||
|
|
(C1<T> && C3<T> && C5<T> && C7<T>) ||
|
|
(C1<T> && C3<T> && C6<T> && C7<T>) ||
|
|
(C1<T> && C4<T> && C5<T> && C6<T>) ||
|
|
(C1<T> && C4<T> && C5<T> && C7<T>) ||
|
|
(C1<T> && C4<T> && C6<T> && C7<T>) ||
|
|
(C1<T> && C5<T> && C6<T> && C7<T>) ||
|
|
(C2<T> && C3<T> && C4<T> && C5<T>) ||
|
|
(C2<T> && C3<T> && C4<T> && C6<T>) ||
|
|
(C2<T> && C3<T> && C4<T> && C7<T>) ||
|
|
(C2<T> && C3<T> && C5<T> && C6<T>) ||
|
|
(C2<T> && C3<T> && C5<T> && C7<T>) ||
|
|
(C2<T> && C3<T> && C6<T> && C7<T>) ||
|
|
(C2<T> && C4<T> && C5<T> && C6<T>) ||
|
|
(C2<T> && C4<T> && C5<T> && C7<T>) ||
|
|
(C2<T> && C4<T> && C6<T> && C7<T>) ||
|
|
(C2<T> && C5<T> && C6<T> && C7<T>) ||
|
|
(C3<T> && C4<T> && C5<T> && C6<T>) ||
|
|
(C3<T> && C4<T> && C5<T> && C7<T>) ||
|
|
(C3<T> && C4<T> && C6<T> && C7<T>) ||
|
|
(C3<T> && C5<T> && C6<T> && C7<T>) ||
|
|
(C4<T> && C5<T> && C6<T> && C7<T>);
|
|
|
|
template <typename T>concept Y = C0<T> || Majority8<T>;
|
|
template <typename T>concept Z = Majority8<T> && C1<T>;
|
|
|
|
constexpr int foo(Majority8 auto x) { return 10; }
|
|
constexpr int foo(Y auto y) { return 20; }
|
|
constexpr int foo(Z auto y) { return 30; }
|
|
static_assert(foo(0) == 30);
|
|
}
|
|
|
|
namespace WhateverThisIs {
|
|
template <typename T> concept C0 = true;
|
|
template <typename T> concept C1 = true;
|
|
template <typename T> concept C2 = true;
|
|
template <typename T> concept C3 = true;
|
|
template <typename T> concept C4 = true;
|
|
|
|
template <typename T>
|
|
concept X =
|
|
(C0<T> || C1<T> || C2<T>) &&
|
|
(C0<T> || C1<T> || C3<T>) &&
|
|
(C0<T> || C1<T> || C4<T>) &&
|
|
(C0<T> || C2<T> || C3<T>) &&
|
|
(C0<T> || C2<T> || C4<T>) &&
|
|
(C0<T> || C3<T> || C4<T>) &&
|
|
(C1<T> || C2<T> || C3<T>) &&
|
|
(C1<T> || C2<T> || C4<T>) &&
|
|
(C1<T> || C3<T> || C4<T>) &&
|
|
(C2<T> || C3<T> || C4<T>);
|
|
|
|
template <typename T>concept Y = C0<T> && X<T>;
|
|
|
|
template <typename T>concept Z = Y<T> && C1<T>;
|
|
|
|
constexpr int foo(X auto x) { return 10; }
|
|
constexpr int foo(Y auto y) { return 20; }
|
|
constexpr int foo(Z auto y) { return 30; }
|
|
|
|
static_assert(foo(0) == 30);
|
|
}
|
|
|
|
namespace WAT{
|
|
// randomly generated formulas misshandled by clang 20,
|
|
// and some other compilers. There is no particular meaning
|
|
// to it except to stress-test the compiler.
|
|
|
|
template<typename T>
|
|
concept Z0 = true;
|
|
|
|
template<typename T>
|
|
concept Z1 = true;
|
|
|
|
template<typename T>
|
|
concept Z2 = true;
|
|
|
|
template<typename T>
|
|
concept Z3 = true;
|
|
|
|
template<typename T>
|
|
concept Z4 = true;
|
|
|
|
template<typename T>
|
|
concept Z5 = true;
|
|
|
|
template<typename T>
|
|
concept Z6 = true;
|
|
|
|
template<typename T>
|
|
concept Z7 = true;
|
|
|
|
template<typename T>
|
|
concept Z8 = true;
|
|
|
|
template<typename T>
|
|
concept Z9 = true;
|
|
|
|
template<typename T>
|
|
concept Z10 = true;
|
|
|
|
template<typename T>
|
|
concept Z11 = true;
|
|
|
|
template<typename T>
|
|
concept Z12 = true;
|
|
|
|
template<typename T>
|
|
concept Z13 = true;
|
|
|
|
template<typename T>
|
|
concept Z14 = true;
|
|
|
|
template<typename T>
|
|
concept Z15 = true;
|
|
|
|
template<typename T>
|
|
concept Z16 = true;
|
|
|
|
template<typename T>
|
|
concept Z17 = true;
|
|
|
|
template<typename T>
|
|
concept Z18 = true;
|
|
|
|
template<typename T>
|
|
concept Z19 = true;
|
|
|
|
namespace T1 {
|
|
template<typename T>
|
|
concept X = ((((((((Z13<T> || (Z2<T> || Z10<T>)) && (Z2<T> && (Z6<T> && ((Z7<T> && Z13<T>) && Z0<T>)))) && (Z13<T> ||
|
|
(Z12<T> && Z8<T>))) && (Z9<T> || (Z2<T> && Z17<T>))) || Z2<T>) && ((((Z17<T> || Z6<T>) && (((Z6<T> || Z4<T>) || Z9<T>)
|
|
&& Z13<T>)) || ((Z14<T> || Z10<T>) || Z3<T>)) || (Z8<T> || ((Z19<T> && (Z3<T> && Z14<T>)) && ((Z5<T> || (Z3<T> &&
|
|
Z5<T>)) || (Z7<T> && Z13<T>)))))) || ((((Z14<T> && (Z2<T> && Z1<T>)) || ((Z17<T> && Z12<T>) && (Z0<T> || ((((Z9<T> ||
|
|
(Z6<T> && Z16<T>)) && Z19<T>) && (Z6<T> && (Z12<T> && Z17<T>))) && (Z19<T> && Z8<T>))))) || (((Z10<T> || Z17<T>) &&
|
|
Z1<T>) && ((Z16<T> && (Z15<T> || Z5<T>)) || ((Z4<T> && Z5<T>) || ((Z1<T> || Z4<T>) || Z2<T>))))) && (((Z12<T> && (Z5<T>
|
|
&& Z10<T>)) || ((Z4<T> && Z18<T>) && Z0<T>)) || ((((Z10<T> || Z0<T>) && Z18<T>) || (Z15<T> && ((Z11<T> && Z5<T>) &&
|
|
Z6<T>))) && Z2<T>)))) && ((((((((((Z8<T> && Z13<T>) && Z7<T>) && Z18<T>) && ((((Z7<T> && Z11<T>) || (Z19<T> && Z6<T>))
|
|
|| Z13<T>) && Z15<T>)) || (Z1<T> || Z15<T>)) || (Z9<T> && (Z6<T> || Z10<T>))) || Z0<T>) && (((Z14<T> || Z4<T>) &&
|
|
(Z4<T> || ((Z4<T> && Z10<T>) && Z11<T>))) || Z4<T>)) && ((((((Z8<T> && ((Z1<T> && (Z16<T> && (Z0<T> && Z6<T>))) &&
|
|
(Z1<T> && Z10<T>))) && ((Z18<T> && Z3<T>) || ((Z14<T> && Z1<T>) || Z15<T>))) && (((Z19<T> || Z17<T>) || ((Z17<T> &&
|
|
(Z9<T> && Z19<T>)) || Z6<T>)) || (((Z4<T> || (((Z4<T> || Z9<T>) && Z6<T>) && Z2<T>)) || ((Z17<T> && (Z16<T> && ((Z14<T>
|
|
&& Z10<T>) && Z17<T>))) || Z9<T>)) && (Z5<T> && Z6<T>)))) && (((Z3<T> && Z14<T>) || Z5<T>) && Z8<T>)) && ((((Z10<T> ||
|
|
(Z17<T> && Z8<T>)) || ((Z16<T> && (((Z12<T> && Z16<T>) || Z18<T>) || (Z4<T> && Z13<T>))) || (Z17<T> && Z10<T>))) ||
|
|
((((Z9<T> && ((Z7<T> || Z2<T>) && Z15<T>)) || ((Z18<T> && Z13<T>) || (Z4<T> || Z14<T>))) || (((Z7<T> || (Z10<T> &&
|
|
(Z14<T> && Z18<T>))) && (Z9<T> || Z5<T>)) || (Z8<T> && ((Z14<T> || Z11<T>) || ((Z4<T> || Z2<T>) && (Z7<T> &&
|
|
Z5<T>)))))) && (((Z14<T> && (Z13<T> && Z10<T>)) || Z8<T>) && (((((Z7<T> || (Z8<T> && Z14<T>)) || Z0<T>) && Z0<T>) ||
|
|
Z17<T>) || Z5<T>)))) && (Z16<T> && Z4<T>))) && (((Z1<T> && Z12<T>) || ((Z17<T> || Z4<T>) || (Z15<T> || (Z6<T> ||
|
|
Z8<T>)))) || (((Z2<T> || Z19<T>) && Z5<T>) && Z1<T>)))) || ((((Z9<T> || (Z12<T> || Z6<T>)) && (Z5<T> || Z12<T>)) &&
|
|
((Z1<T> || Z8<T>) || (Z18<T> && Z19<T>))) || ((Z11<T> && Z17<T>) || (Z5<T> && Z12<T>)))));
|
|
|
|
template<typename T>
|
|
concept Y = Z0<T> && X<T>;
|
|
|
|
constexpr int foo(X auto x) { return 1; }
|
|
constexpr int foo(Y auto y) { return 2; }
|
|
static_assert(foo(0) == 2);
|
|
}
|
|
|
|
namespace T3 {
|
|
|
|
template<typename T>
|
|
concept X = (((Z2<T> && ((Z7<T> || (Z8<T> && (Z6<T> && Z4<T>))) && ((Z1<T> && Z3<T>) || ((Z1<T> && (Z7<T> && Z2<T>)) &&
|
|
Z1<T>)))) && ((Z7<T> || (((Z6<T> || Z0<T>) || (Z5<T> || Z3<T>)) && Z3<T>)) && ((Z6<T> || ((((Z6<T> && Z8<T>) && (Z8<T>
|
|
&& Z3<T>)) || (Z6<T> && Z5<T>)) && (Z6<T> || (Z3<T> && (Z3<T> || Z8<T>))))) && ((((Z3<T> || (Z3<T> && (Z6<T> ||
|
|
Z8<T>))) && Z3<T>) && Z9<T>) || ((Z7<T> || Z6<T>) || ((Z3<T> && (Z4<T> && (Z0<T> && Z3<T>))) && (((Z5<T> && (Z1<T> ||
|
|
Z5<T>)) || Z3<T>) && (((Z7<T> || Z5<T>) || ((Z9<T> || Z1<T>) && ((Z9<T> && Z0<T>) || Z0<T>))) && (Z5<T> &&
|
|
Z7<T>))))))))) || (((((Z5<T> || Z0<T>) || (Z7<T> && (Z8<T> && (Z9<T> || (Z6<T> && Z1<T>))))) || (((Z6<T> || Z3<T>) ||
|
|
Z1<T>) && Z3<T>)) || (((Z9<T> && ((((Z9<T> || (Z9<T> && (((Z7<T> || ((Z4<T> || Z3<T>) || Z8<T>)) && Z3<T>) && (Z1<T> &&
|
|
Z3<T>)))) || ((Z1<T> && ((Z8<T> && (Z9<T> && Z6<T>)) && (Z1<T> || Z5<T>))) || Z0<T>)) && Z2<T>) && ((Z1<T> || (Z0<T> ||
|
|
Z7<T>)) || (Z9<T> && Z4<T>)))) || (Z4<T> || Z3<T>)) && ((Z3<T> && Z9<T>) || ((Z6<T> || Z8<T>) && (Z7<T> && (Z9<T> ||
|
|
(Z3<T> || Z7<T>))))))) && (Z2<T> && (Z7<T> || Z3<T>))));
|
|
|
|
template<typename T>
|
|
concept Y = X<T> && ((Z2<T> && (((Z6<T> || Z5<T>) || Z1<T>) && (Z4<T> || ((Z9<T> || (Z2<T> || Z5<T>)) || Z7<T>)))) ||
|
|
((((((Z9<T> || (Z1<T> || Z3<T>)) && Z5<T>) || ((Z5<T> || Z0<T>) || (Z2<T> && Z1<T>))) || Z3<T>) || (((Z0<T> && ((Z4<T>
|
|
&& (((Z3<T> && Z0<T>) || (Z1<T> || Z5<T>)) || Z6<T>)) || ((Z7<T> || (Z1<T> || Z8<T>)) || Z8<T>))) && ((Z6<T> || (Z6<T>
|
|
|| Z9<T>)) && (Z1<T> || Z0<T>))) || (Z5<T> || (((Z8<T> || Z5<T>) && (((((((Z3<T> || Z2<T>) || Z6<T>) || ((Z6<T> ||
|
|
Z4<T>) || ((Z1<T> && Z9<T>) || Z8<T>))) || (Z3<T> && (Z9<T> && (Z6<T> || (Z1<T> || Z0<T>))))) && (((Z3<T> && Z5<T>) ||
|
|
(Z4<T> || Z2<T>)) && (Z5<T> && (Z6<T> || (Z0<T> || Z1<T>))))) || Z1<T>) || (Z4<T> || (Z1<T> || Z4<T>)))) && Z9<T>))))
|
|
&& ((((Z6<T> || (((Z6<T> && (Z3<T> || Z9<T>)) && Z6<T>) && (Z1<T> && Z9<T>))) && ((Z4<T> && (Z4<T> && Z3<T>)) &&
|
|
Z4<T>)) && (((((Z1<T> && Z3<T>) && (Z5<T> && Z2<T>)) || (Z1<T> || (Z9<T> || Z1<T>))) && (Z8<T> || Z1<T>)) || ((Z4<T> ||
|
|
Z5<T>) && Z3<T>))) && ((((((Z8<T> || Z4<T>) || (Z6<T> && Z3<T>)) || (Z4<T> || Z0<T>)) || Z4<T>) && (Z7<T> || Z5<T>)) &&
|
|
((Z8<T> || (Z2<T> && Z1<T>)) && (Z8<T> || Z1<T>))))));
|
|
|
|
constexpr int foo(X auto x) { return 1; }
|
|
constexpr int foo(Y auto y) { return 2; }
|
|
static_assert(foo(0) == 2);
|
|
|
|
}
|
|
|
|
}
|