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
126 lines
4.1 KiB
C++
126 lines
4.1 KiB
C++
// RUN: %clang_cc1 -ast-print %s -o - -std=c++17 | FileCheck %s
|
|
|
|
namespace ns {
|
|
template <typename T> struct S { T x; };
|
|
template <typename T> void foo(T) {}
|
|
template <typename T> T var = T();
|
|
}
|
|
|
|
// CHECK: template struct ns::S<int>;
|
|
template struct ns::S<int>;
|
|
// CHECK: extern template struct ns::S<float>;
|
|
extern template struct ns::S<float>;
|
|
|
|
// CHECK: template void ns::foo<int>(int);
|
|
template void ns::foo<int>(int);
|
|
// CHECK: extern template void ns::foo<float>(float);
|
|
extern template void ns::foo<float>(float);
|
|
|
|
template <typename T> void bar(T) {}
|
|
// CHECK: template void bar(int);
|
|
template void bar(int);
|
|
|
|
// empty <> (args deduced)
|
|
// CHECK: template void ns::foo(double);
|
|
template void ns::foo<>(double);
|
|
|
|
// CHECK: template int ns::var<int>;
|
|
template int ns::var<int>;
|
|
// CHECK: extern template float ns::var<float>;
|
|
extern template float ns::var<float>;
|
|
|
|
namespace ns {
|
|
// CHECK: template struct S<short>;
|
|
template struct S<short>;
|
|
// CHECK: template void foo<short>(short);
|
|
template void foo<short>(short);
|
|
// CHECK: template short var<short>;
|
|
template short var<short>;
|
|
}
|
|
|
|
template <typename T> struct X { struct Inner {}; };
|
|
// CHECK: template struct X<int>::Inner;
|
|
template struct X<int>::Inner;
|
|
// CHECK: extern template struct X<float>::Inner;
|
|
extern template struct X<float>::Inner;
|
|
|
|
template <typename T> struct Outer {
|
|
void method();
|
|
template <typename U> void f(U);
|
|
template <typename U> static U var;
|
|
template <typename U> struct Inner {};
|
|
static T sval;
|
|
static T arr[1];
|
|
};
|
|
template <typename T> void Outer<T>::method() {}
|
|
template <typename T> template <typename U> void Outer<T>::f(U) {}
|
|
template <typename T> template <typename U> U Outer<T>::var = U{};
|
|
template <typename T> T Outer<T>::sval = T{};
|
|
template <typename T> T Outer<T>::arr[1] = {};
|
|
|
|
// CHECK: template void Outer<int>::method();
|
|
template void Outer<int>::method();
|
|
// CHECK: template void Outer<int>::f<double>(double);
|
|
template void Outer<int>::f<double>(double);
|
|
// CHECK: template double Outer<int>::var<double>;
|
|
template double Outer<int>::var<double>;
|
|
// CHECK: template struct Outer<int>::Inner<double>;
|
|
template struct Outer<int>::Inner<double>;
|
|
// CHECK: template int Outer<int>::sval;
|
|
template int Outer<int>::sval;
|
|
// CHECK: template int Outer<int>::arr[1];
|
|
template int Outer<int>::arr[1];
|
|
|
|
// CHECK: extern template void Outer<float>::method();
|
|
extern template void Outer<float>::method();
|
|
// CHECK: extern template void Outer<float>::f<double>(double);
|
|
extern template void Outer<float>::f<double>(double);
|
|
// CHECK: extern template double Outer<float>::var<double>;
|
|
extern template double Outer<float>::var<double>;
|
|
// CHECK: extern template struct Outer<float>::Inner<double>;
|
|
extern template struct Outer<float>::Inner<double>;
|
|
// CHECK: extern template int Outer<float>::sval;
|
|
extern template int Outer<float>::sval;
|
|
|
|
template <typename T> struct A {
|
|
template <typename U> struct B {
|
|
template <typename V> void g(V);
|
|
};
|
|
};
|
|
template <typename T> template <typename U> template <typename V>
|
|
void A<T>::B<U>::g(V) {}
|
|
|
|
// CHECK: template void A<int>::B<double>::g<float>(float);
|
|
template void A<int>::B<double>::g<float>(float);
|
|
// CHECK: extern template void A<float>::B<double>::g<int>(int);
|
|
extern template void A<float>::B<double>::g<int>(int);
|
|
|
|
namespace GH197797 {
|
|
struct S {};
|
|
enum E { X };
|
|
template <typename T> struct Wrap {};
|
|
|
|
template <typename T> T var = T{};
|
|
// CHECK: extern template S var<S>;
|
|
extern template S var<S>;
|
|
// CHECK: extern template E var<E>;
|
|
extern template E var<E>;
|
|
// CHECK: extern template Wrap<int> var<Wrap<int>>;
|
|
extern template Wrap<int> var<Wrap<int>>;
|
|
|
|
template <typename T> T var2 = T{};
|
|
// CHECK: extern template ns::S<int> var2<ns::S<int>>;
|
|
extern template ns::S<int> var2<ns::S<int>>;
|
|
// CHECK: extern template ns::S<float> var2<ns::S<float>>;
|
|
extern template ns::S<float> var2<ns::S<float>>;
|
|
} // namespace GH197797
|
|
|
|
// empty <> (default template arguments)
|
|
template <typename T = int> struct Defaulted {};
|
|
// CHECK: template struct Defaulted;
|
|
template struct Defaulted<>;
|
|
|
|
template <typename T = int> T defaulted_var = T{};
|
|
// CHECK: template int defaulted_var;
|
|
template int defaulted_var<>;
|