@@ -23,11 +23,21 @@ struct Bar {};
2323template <typename T1>
2424using BarUsing = Bar<T1, float >;
2525
26+ template <typename T1, typename T2>
27+ using BarUsing2 = Bar<Foo<T2>, T1>;
28+
29+ template <typename T1>
30+ using BarUsingBarUsing2 = BarUsing2<T1, int >;
31+
2632class Baz {
2733public:
2834 using type = BarUsing<double >;
2935};
3036
37+ template <typename T1, typename T2, typename T3 = BarUsing2<T1, T2>,
38+ typename T4 = BarUsing<T2>>
39+ struct AliasAsDefaultArg {};
40+
3141} // namespace ns
3242
3343[[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 2 )]]
@@ -57,7 +67,32 @@ template void bar_using(ns::BarUsing<int>);
5767
5868// CHECK: template <typename T> void bar_using(ns::Bar<T, float>);
5969
70+ template <typename T1, typename T2>
71+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 2 )]]
72+ void bar_using2 (ns::BarUsing2<T1, T2> Arg) {}
73+ template void bar_using2 (ns::BarUsing2<int , float >);
74+
75+ // CHECK: template <typename T1, typename T2> void bar_using2(ns::Bar<ns::Foo<T2>, T1>);
76+
77+ template <typename T1>
78+ [[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 2 )]]
79+ void bar_using_bar_using2 (ns::BarUsingBarUsing2<T1> Arg) {}
80+ template void bar_using_bar_using2 (ns::BarUsingBarUsing2<int >);
81+
82+ // CHECK: template <typename T1> void bar_using_bar_using2(ns::Bar<ns::Foo<int>, T1>);
83+
6084[[__sycl_detail__::add_ir_attributes_function(" sycl-nd-range-kernel" , 2 )]]
6185void baz_type (ns::Baz::type Arg) {}
6286
6387// CHECK: void baz_type(ns::Bar<double, float> Arg);
88+
89+ #if 0
90+ // This test case fails, but it is added here in advance to add a record of a
91+ // known bug.
92+ template<typename T1, typename T2>
93+ [[__sycl_detail__::add_ir_attributes_function("sycl-nd-range-kernel", 2)]]
94+ void alias_as_default_template_arg(ns::AliasAsDefaultArg<T1, T2> Arg) {}
95+ template void alias_as_default_template_arg(ns::AliasAsDefaultArg<int, float>);
96+
97+ // CHECK-DISABLED: template <typename T1, typename T2> void alias_as_default_template_arg(ns::AliasAsDefaultArg<T1, T2, ns::Bar<ns::Foo<T2>, T1>, ns::Bar<T2, float>>);
98+ #endif
0 commit comments