1 // RUN: %clang_cc1 -fsyntax-only -verify %s
3 // Test template instantiation for Clang-specific features.
5 // ---------------------------------------------------------------------
7 // ---------------------------------------------------------------------
8 typedef __attribute__(( ext_vector_type(2) )) double double2
;
9 typedef __attribute__(( ext_vector_type(4) )) double double4
;
12 struct ExtVectorAccess0
{
13 void f(T v1
, double4 v2
) {
18 template struct ExtVectorAccess0
<double2
>;
19 template struct ExtVectorAccess0
<double4
>;
22 struct ExtVectorAccess1
{
23 void f(T
*v1
, double4
*v2
) {
28 template struct ExtVectorAccess1
<double2
>;
29 template struct ExtVectorAccess1
<double4
>;
31 template<typename T
, typename U
, int N
, int M
>
32 struct ShuffleVector0
{
33 void f(T t
, U u
, double2 a
, double2 b
) {
34 (void)__builtin_shufflevector(t
, u
, N
, M
); // expected-error{{index}}
35 (void)__builtin_shufflevector(a
, b
, N
, M
); // expected-error{{index}}
36 (void)__builtin_shufflevector(a
, b
, 2, 1);
40 template struct ShuffleVector0
<double2
, double2
, 2, 1>;
41 template struct ShuffleVector0
<double2
, double2
, 4, 3>; // expected-note{{instantiation}}