|
2 | 2 | // RUN: -target-cpu pwr10 %s -verify |
3 | 3 | // RUN: %clang_cc1 -triple powerpc64-unknown-unknown -fsyntax-only \ |
4 | 4 | // RUN: -target-cpu pwr10 %s -verify |
5 | | -// RUN: %clang_cc1 -triple powerpc64le-unknown-unknown -fsyntax-only \ |
6 | | -// RUN: -target-cpu future %s -verify |
7 | | -// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -fsyntax-only \ |
8 | | -// RUN: -target-cpu future %s -verify |
9 | 5 |
|
10 | 6 | // The use of PPC MMA types is strongly restricted. Non-pointer MMA variables |
11 | 7 | // can only be declared in functions and a limited number of operations are |
12 | 8 | // supported on these types. This test case checks that invalid uses of MMA |
13 | 9 | // types are correctly prevented. |
14 | 10 |
|
15 | | -// vector dmr |
16 | | - |
17 | | -// typedef |
18 | | -typedef __dmr1024 dmr_t; |
19 | | - |
20 | | -// function argument |
21 | | -void testDmrArg1(__dmr1024 vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}} |
22 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
23 | | - *vdmrp = vdmr; |
24 | | -} |
25 | | - |
26 | | -void testDmrArg2(const __dmr1024 vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}} |
27 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
28 | | - *vdmrp = vdmr; |
29 | | -} |
30 | | - |
31 | | -void testDmrArg3(const dmr_t vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}} |
32 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
33 | | - *vdmrp = vdmr; |
34 | | -} |
35 | | - |
36 | | -// function return |
37 | | -__dmr1024 testDmrRet1(int *ptr) { // expected-error {{invalid use of PPC MMA type}} |
38 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
39 | | - return *vdmrp; // expected-error {{invalid use of PPC MMA type}} |
40 | | -} |
41 | | - |
42 | | -const dmr_t testDmrRet4(int *ptr) { // expected-error {{invalid use of PPC MMA type}} |
43 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
44 | | - return *vdmrp; // expected-error {{invalid use of PPC MMA type}} |
45 | | -} |
46 | | - |
47 | | -// global |
48 | | -__dmr1024 globalvdmr; // expected-error {{invalid use of PPC MMA type}} |
49 | | -const __dmr1024 globalvdmr2; // expected-error {{invalid use of PPC MMA type}} |
50 | | -__dmr1024 *globalvdmrp; |
51 | | -const __dmr1024 *const globalvdmrp2; |
52 | | -dmr_t globalvdmr_t; // expected-error {{invalid use of PPC MMA type}} |
53 | | - |
54 | | -// struct field |
55 | | -struct TestDmrStruct { |
56 | | - int a; |
57 | | - float b; |
58 | | - __dmr1024 c; // expected-error {{invalid use of PPC MMA type}} |
59 | | - __dmr1024 *vq; |
60 | | -}; |
61 | | - |
62 | | -// operators |
63 | | -int testDmrOperators1(int *ptr) { |
64 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
65 | | - __dmr1024 vdmr1 = *(vdmrp + 0); |
66 | | - __dmr1024 vdmr2 = *(vdmrp + 1); |
67 | | - __dmr1024 vdmr3 = *(vdmrp + 2); |
68 | | - if (vdmr1) // expected-error {{statement requires expression of scalar type ('__dmr1024' invalid)}} |
69 | | - *(vdmrp + 10) = vdmr1; |
70 | | - if (!vdmr2) // expected-error {{invalid argument type '__dmr1024' to unary expression}} |
71 | | - *(vdmrp + 11) = vdmr3; |
72 | | - int c1 = vdmr1 && vdmr2; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}} |
73 | | - int c2 = vdmr2 == vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}} |
74 | | - int c3 = vdmr2 < vdmr1; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}} |
75 | | - return c1 || c2 || c3; |
76 | | -} |
77 | | - |
78 | | -void testDmrOperators2(int *ptr) { |
79 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
80 | | - __dmr1024 vdmr1 = *(vdmrp + 0); |
81 | | - __dmr1024 vdmr2 = *(vdmrp + 1); |
82 | | - __dmr1024 vdmr3 = *(vdmrp + 2); |
83 | | - vdmr1 = -vdmr1; // expected-error {{invalid argument type '__dmr1024' to unary expression}} |
84 | | - vdmr2 = vdmr1 + vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}} |
85 | | - vdmr2 = vdmr2 * vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}} |
86 | | - vdmr3 = vdmr3 | vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}} |
87 | | - vdmr3 = vdmr3 << 2; // expected-error {{invalid operands to binary expression ('__dmr1024' and 'int')}} |
88 | | - *(vdmrp + 10) = vdmr1; |
89 | | - *(vdmrp + 11) = vdmr2; |
90 | | - *(vdmrp + 12) = vdmr3; |
91 | | -} |
92 | | - |
93 | | -vector unsigned char testDmrOperators3(int *ptr) { |
94 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
95 | | - __dmr1024 vdmr1 = *(vdmrp + 0); |
96 | | - __dmr1024 vdmr2 = *(vdmrp + 1); |
97 | | - __dmr1024 vdmr3 = *(vdmrp + 2); |
98 | | - vdmr1 ? *(vdmrp + 10) = vdmr2 : *(vdmrp + 11) = vdmr3; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}} |
99 | | - vdmr2 = vdmr3; |
100 | | - return vdmr2[1]; // expected-error {{subscripted value is not an array, pointer, or vector}} |
101 | | -} |
102 | | - |
103 | | -void testDmrOperators4(int v, void *ptr) { |
104 | | - __dmr1024 *vdmrp = (__dmr1024 *)ptr; |
105 | | - __dmr1024 vdmr1 = (__dmr1024)v; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}} |
106 | | - __dmr1024 vdmr2 = (__dmr1024)vdmrp; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}} |
107 | | -} |
108 | | - |
109 | 11 | // vector quad |
110 | 12 |
|
111 | 13 | // typedef |
|
0 commit comments