xref: /aosp_15_r20/external/clang/test/SemaCXX/altivec.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -faltivec -fno-lax-vector-conversions -triple powerpc-unknown-unknown -fcxx-exceptions -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li typedef int V4i __attribute__((vector_size(16)));
4*67e74705SXin Li 
test_vec_step(vector short arg1)5*67e74705SXin Li void test_vec_step(vector short arg1) {
6*67e74705SXin Li   vector bool char vbc;
7*67e74705SXin Li   vector signed char vsc;
8*67e74705SXin Li   vector unsigned char vuc;
9*67e74705SXin Li   vector bool short vbs;
10*67e74705SXin Li   vector short vs;
11*67e74705SXin Li   vector unsigned short vus;
12*67e74705SXin Li   vector pixel vp;
13*67e74705SXin Li   vector bool int vbi;
14*67e74705SXin Li   vector int vi;
15*67e74705SXin Li   vector unsigned int vui;
16*67e74705SXin Li   vector float vf;
17*67e74705SXin Li 
18*67e74705SXin Li   vector int *pvi;
19*67e74705SXin Li 
20*67e74705SXin Li   int res1[vec_step(arg1) == 8 ? 1 : -1];
21*67e74705SXin Li   int res2[vec_step(vbc) == 16 ? 1 : -1];
22*67e74705SXin Li   int res3[vec_step(vsc) == 16 ? 1 : -1];
23*67e74705SXin Li   int res4[vec_step(vuc) == 16 ? 1 : -1];
24*67e74705SXin Li   int res5[vec_step(vbs) == 8 ? 1 : -1];
25*67e74705SXin Li   int res6[vec_step(vs) == 8 ? 1 : -1];
26*67e74705SXin Li   int res7[vec_step(vus) == 8 ? 1 : -1];
27*67e74705SXin Li   int res8[vec_step(vp) == 8 ? 1 : -1];
28*67e74705SXin Li   int res9[vec_step(vbi) == 4 ? 1 : -1];
29*67e74705SXin Li   int res10[vec_step(vi) == 4 ? 1 : -1];
30*67e74705SXin Li   int res11[vec_step(vui) == 4 ? 1 : -1];
31*67e74705SXin Li   int res12[vec_step(vf) == 4 ? 1 : -1];
32*67e74705SXin Li   int res13[vec_step(*pvi) == 4 ? 1 : -1];
33*67e74705SXin Li }
34*67e74705SXin Li 
f(V4i a)35*67e74705SXin Li void f(V4i a)
36*67e74705SXin Li {
37*67e74705SXin Li }
38*67e74705SXin Li 
test1()39*67e74705SXin Li void test1()
40*67e74705SXin Li {
41*67e74705SXin Li   V4i vGCC;
42*67e74705SXin Li   vector int vAltiVec;
43*67e74705SXin Li 
44*67e74705SXin Li   f(vAltiVec);
45*67e74705SXin Li   vGCC = vAltiVec;
46*67e74705SXin Li   bool res = vGCC > vAltiVec;
47*67e74705SXin Li   vAltiVec = 0 ? vGCC : vGCC;
48*67e74705SXin Li }
49*67e74705SXin Li 
50*67e74705SXin Li template<typename T>
template_f(T param)51*67e74705SXin Li void template_f(T param) {
52*67e74705SXin Li   param++;
53*67e74705SXin Li }
54*67e74705SXin Li 
test2()55*67e74705SXin Li void test2()
56*67e74705SXin Li {
57*67e74705SXin Li   vector int vi;
58*67e74705SXin Li   ++vi;
59*67e74705SXin Li   vi++;
60*67e74705SXin Li   --vi;
61*67e74705SXin Li   vi--;
62*67e74705SXin Li   vector float vf;
63*67e74705SXin Li   vf++;
64*67e74705SXin Li 
65*67e74705SXin Li   ++vi=vi; // expected-warning {{unsequenced}}
66*67e74705SXin Li   (++vi)[1]=1;
67*67e74705SXin Li   template_f(vi);
68*67e74705SXin Li }
69*67e74705SXin Li 
70*67e74705SXin Li namespace LValueToRValueConversions {
71*67e74705SXin Li   struct Struct {
72*67e74705SXin Li     float f();
73*67e74705SXin Li     int n();
74*67e74705SXin Li   };
75*67e74705SXin Li 
76*67e74705SXin Li   vector float initFloat = (vector float)(Struct().f); // expected-error {{did you mean to call it}}
77*67e74705SXin Li   vector int initInt = (vector int)(Struct().n); // expected-error {{did you mean to call it}}
78*67e74705SXin Li }
79*67e74705SXin Li 
f()80*67e74705SXin Li void f() {
81*67e74705SXin Li   try {}
82*67e74705SXin Li   catch (vector pixel px) {}
83*67e74705SXin Li };
84