xref: /aosp_15_r20/external/clang/test/Sema/altivec-init.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=powerpc-apple-darwin8 -faltivec -verify -pedantic -fsyntax-only
2*67e74705SXin Li 
3*67e74705SXin Li typedef int v4 __attribute((vector_size(16)));
4*67e74705SXin Li typedef short v8 __attribute((vector_size(16)));
5*67e74705SXin Li 
foo(void)6*67e74705SXin Li v8 foo(void) {
7*67e74705SXin Li   v8 a;
8*67e74705SXin Li   v4 b;
9*67e74705SXin Li   a = (v8){4, 2};
10*67e74705SXin Li   b = (v4)(5, 6, 7, 8, 9); // expected-warning {{excess elements in vector initializer}}
11*67e74705SXin Li   b = (v4)(5, 6, 8, 8.0f);
12*67e74705SXin Li 
13*67e74705SXin Li   vector int vi;
14*67e74705SXin Li   vi = (vector int)(1);
15*67e74705SXin Li   vi = (vector int)(1, 2);          // expected-error {{number of elements must be either one or match the size of the vector}}
16*67e74705SXin Li   vi = (vector int)(1, 2, 3, 4);
17*67e74705SXin Li   vi = (vector int)(1, 2, 3, 4, 5); // expected-warning {{excess elements in vector initializer}}
18*67e74705SXin Li   vi = (vector int){1};
19*67e74705SXin Li   vi = (vector int){1, 2};
20*67e74705SXin Li   vi = (vector int){1, 2, 3, 4, 5}; // expected-warning {{excess elements in vector initializer}}
21*67e74705SXin Li   vector float vf;
22*67e74705SXin Li   vf = (vector float)(1.0);
23*67e74705SXin Li 
24*67e74705SXin Li   return (v8){0, 1, 2, 3, 1, 2, 3, 4};
25*67e74705SXin Li 
26*67e74705SXin Li   // FIXME: test that (type)(fn)(args) still works with -faltivec
27*67e74705SXin Li   // FIXME: test that c++ overloaded commas still work -faltivec
28*67e74705SXin Li }
29*67e74705SXin Li 
f(v4 a)30*67e74705SXin Li void __attribute__((__overloadable__)) f(v4 a)
31*67e74705SXin Li {
32*67e74705SXin Li }
33*67e74705SXin Li 
f(int a)34*67e74705SXin Li void __attribute__((__overloadable__)) f(int a)
35*67e74705SXin Li {
36*67e74705SXin Li }
37*67e74705SXin Li 
test()38*67e74705SXin Li void test()
39*67e74705SXin Li {
40*67e74705SXin Li   v4 vGCC;
41*67e74705SXin Li   vector int vAltiVec;
42*67e74705SXin Li 
43*67e74705SXin Li   f(vAltiVec);
44*67e74705SXin Li   vGCC = vAltiVec;
45*67e74705SXin Li   int res = vGCC > vAltiVec;
46*67e74705SXin Li   vAltiVec = 0 ? vGCC : vGCC;
47*67e74705SXin Li }
48