brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.8 KiB · 88926ac Raw
190 lines · c
1// RUN: %clang_cc1 -triple powerpc64le-unknown-unknown -fsyntax-only \2// RUN:   -target-cpu future %s -verify3// RUN: %clang_cc1 -triple powerpc64-unknown-unknown -fsyntax-only \4// RUN:   -target-cpu future %s -verify5 6// The use of PPC MMA types is strongly restricted. Non-pointer MMA variables7// can only be declared in functions and a limited number of operations are8// supported on these types. This test case checks that invalid uses of MMA9// types are correctly prevented.10 11// vector dmr12 13// typedef14typedef __dmr1024 dmr_t;15typedef __dmr2048 dmrp_t;16 17// function argument18void testDmrArg1(dmr_t vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}}19  dmr_t *vdmrp = (dmr_t *)ptr;20  *vdmrp = vdmr;21}22 23void testDmrArg2(const dmr_t vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}}24  dmr_t *vdmrp = (dmr_t *)ptr;25  *vdmrp = vdmr;26}27 28void testDmrArg3(const dmr_t vdmr, int *ptr) { // expected-error {{invalid use of PPC MMA type}}29  dmr_t *vdmrp = (dmr_t *)ptr;30  *vdmrp = vdmr;31}32 33void testDmrPArg1(const dmrp_t vdmrp, int *ptr) { // expected-error {{invalid use of PPC MMA type}}34  dmrp_t *vdmrpp = (dmrp_t *)ptr;35  *vdmrpp = vdmrp;36}37 38void testDmrPArg2(const dmrp_t vdmrp, int *ptr) { // expected-error {{invalid use of PPC MMA type}}39  dmrp_t *vdmrpp = (dmrp_t *)ptr;40  *vdmrpp = vdmrp;41}42 43void testDmrPArg3(const dmrp_t vdmrp, int *ptr) { // expected-error {{invalid use of PPC MMA type}}44  dmrp_t *vdmrpp = (dmrp_t *)ptr;45  *vdmrpp = vdmrp;46}47 48// function return49dmr_t testDmrRet1(int *ptr) { // expected-error {{invalid use of PPC MMA type}}50  dmr_t *vdmrp = (dmr_t *)ptr;51  return *vdmrp; // expected-error {{invalid use of PPC MMA type}}52}53 54const dmr_t testDmrRet4(int *ptr) { // expected-error {{invalid use of PPC MMA type}}55  dmr_t *vdmrp = (dmr_t *)ptr;56  return *vdmrp; // expected-error {{invalid use of PPC MMA type}}57}58 59dmrp_t testDmrPRet1(int *ptr) { // expected-error {{invalid use of PPC MMA type}}60  dmrp_t *vdmrpp = (dmrp_t *)ptr;61  return *vdmrpp; // expected-error {{invalid use of PPC MMA type}}62}63 64const dmrp_t testDmrPRet4(int *ptr) { // expected-error {{invalid use of PPC MMA type}}65  dmrp_t *vdmrpp = (dmrp_t *)ptr;66  return *vdmrpp; // expected-error {{invalid use of PPC MMA type}}67}68 69// global70dmr_t globalvdmr;        // expected-error {{invalid use of PPC MMA type}}71const dmr_t globalvdmr2; // expected-error {{invalid use of PPC MMA type}}72dmr_t *globalvdmrp;73const dmr_t *const globalvdmrp2;74dmr_t globalvdmr_t; // expected-error {{invalid use of PPC MMA type}}75 76dmrp_t globalvdmrp;        // expected-error {{invalid use of PPC MMA type}}77const dmrp_t globalvdmrp2; // expected-error {{invalid use of PPC MMA type}}78dmrp_t *globalvdmrpp;79const dmrp_t *const globalvdmrpp2;80dmrp_t globalvdmrp_t; // expected-error {{invalid use of PPC MMA type}}81 82// struct field83struct TestDmrStruct {84  int a;85  float b;86  dmr_t c; // expected-error {{invalid use of PPC MMA type}}87  dmr_t *vq;88};89 90struct TestDmrPStruct {91  int a;92  float b;93  dmrp_t c; // expected-error {{invalid use of PPC MMA type}}94  dmrp_t *vq;95};96 97// operators98int testDmrOperators1(int *ptr) {99  __dmr1024 *vdmrp = (__dmr1024 *)ptr;100  __dmr1024 vdmr1 = *(vdmrp + 0);101  __dmr1024 vdmr2 = *(vdmrp + 1);102  __dmr1024 vdmr3 = *(vdmrp + 2);103  if (vdmr1) // expected-error {{statement requires expression of scalar type ('__dmr1024' invalid)}}104    *(vdmrp + 10) = vdmr1;105  if (!vdmr2) // expected-error {{invalid argument type '__dmr1024' to unary expression}}106    *(vdmrp + 11) = vdmr3;107  int c1 = vdmr1 && vdmr2; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}108  int c2 = vdmr2 == vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}109  int c3 = vdmr2 < vdmr1;  // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}110  return c1 || c2 || c3;111}112 113void testDmrOperators2(int *ptr) {114  __dmr1024 *vdmrp = (__dmr1024 *)ptr;115  __dmr1024 vdmr1 = *(vdmrp + 0);116  __dmr1024 vdmr2 = *(vdmrp + 1);117  __dmr1024 vdmr3 = *(vdmrp + 2);118  vdmr1 = -vdmr1;        // expected-error {{invalid argument type '__dmr1024' to unary expression}}119  vdmr2 = vdmr1 + vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}120  vdmr2 = vdmr2 * vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}121  vdmr3 = vdmr3 | vdmr3; // expected-error {{invalid operands to binary expression ('__dmr1024' and '__dmr1024')}}122  vdmr3 = vdmr3 << 2;    // expected-error {{invalid operands to binary expression ('__dmr1024' and 'int')}}123  *(vdmrp + 10) = vdmr1;124  *(vdmrp + 11) = vdmr2;125  *(vdmrp + 12) = vdmr3;126}127 128vector unsigned char testDmrOperators3(int *ptr) {129  __dmr1024 *vdmrp = (__dmr1024 *)ptr;130  __dmr1024 vdmr1 = *(vdmrp + 0);131  __dmr1024 vdmr2 = *(vdmrp + 1);132  __dmr1024 vdmr3 = *(vdmrp + 2);133  vdmr1 ? *(vdmrp + 10) = vdmr2 : *(vdmrp + 11) = vdmr3; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}}134  vdmr2 = vdmr3;135  return vdmr2[1]; // expected-error {{subscripted value is not an array, pointer, or vector}}136}137 138void testDmrOperators4(int v, void *ptr) {139  __dmr1024 *vdmrp = (__dmr1024 *)ptr;140  __dmr1024 vdmr1 = (__dmr1024)v;   // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}}141  __dmr1024 vdmr2 = (__dmr1024)vdmrp; // expected-error {{used type '__dmr1024' where arithmetic or pointer type is required}}142}143 144int testDmrPOperators1(int *ptr) {145  __dmr2048 *vdmrpp = (__dmr2048 *)ptr;146  __dmr2048 vdmrp1 = *(vdmrpp + 0);147  __dmr2048 vdmrp2 = *(vdmrpp + 1);148  __dmr2048 vdmrp3 = *(vdmrpp + 2);149  if (vdmrp1) // expected-error {{statement requires expression of scalar type ('__dmr2048' invalid)}}150    *(vdmrpp + 10) = vdmrp1;151  if (!vdmrp2) // expected-error {{invalid argument type '__dmr2048' to unary expression}}152    *(vdmrpp + 11) = vdmrp3;153  int c1 = vdmrp1 && vdmrp2; // expected-error {{invalid operands to binary expression ('__dmr2048' and '__dmr2048')}}154  int c2 = vdmrp2 == vdmrp3; // expected-error {{invalid operands to binary expression ('__dmr2048' and '__dmr2048')}}155  int c3 = vdmrp2 < vdmrp1;  // expected-error {{invalid operands to binary expression ('__dmr2048' and '__dmr2048')}}156  return c1 || c2 || c3;157}158 159void testDmrPOperators2(int *ptr) {160  __dmr2048 *vdmrpp = (__dmr2048 *)ptr;161  __dmr2048 vdmrp1 = *(vdmrpp + 0);162  __dmr2048 vdmrp2 = *(vdmrpp + 1);163  __dmr2048 vdmrp3 = *(vdmrpp + 2);164  vdmrp1 = -vdmrp1;        // expected-error {{invalid argument type '__dmr2048' to unary expression}}165  vdmrp2 = vdmrp1 + vdmrp3; // expected-error {{invalid operands to binary expression ('__dmr2048' and '__dmr2048')}}166  vdmrp2 = vdmrp2 * vdmrp3; // expected-error {{invalid operands to binary expression ('__dmr2048' and '__dmr2048')}}167  vdmrp3 = vdmrp3 | vdmrp3; // expected-error {{invalid operands to binary expression ('__dmr2048' and '__dmr2048')}}168  vdmrp3 = vdmrp3 << 2;    // expected-error {{invalid operands to binary expression ('__dmr2048' and 'int')}}169  *(vdmrpp + 10) = vdmrp1;170  *(vdmrpp + 11) = vdmrp2;171  *(vdmrpp + 12) = vdmrp3;172}173 174 175vector unsigned char testDmrPOperators3(int *ptr) {176  __dmr2048 *vdmrpp = (__dmr2048 *)ptr;177  __dmr2048 vdmrp1 = *(vdmrpp + 0);178  __dmr2048 vdmrp2 = *(vdmrpp + 1);179  __dmr2048 vdmrp3 = *(vdmrpp + 2);180  vdmrp1 ? *(vdmrpp + 10) = vdmrp2 : *(vdmrpp + 11) = vdmrp3; // expected-error {{used type '__dmr2048' where arithmetic or pointer type is required}}181  vdmrp2 = vdmrp3;182  return vdmrp2[1]; // expected-error {{subscripted value is not an array, pointer, or vector}}183}184 185void testDmrPOperators4(int v, void *ptr) {186  __dmr2048 *vdmrpp = (__dmr2048 *)ptr;187  __dmr2048 vdmrp1 = (__dmr2048)v;   // expected-error {{used type '__dmr2048' where arithmetic or pointer type is required}}188  __dmr2048 vdmrp2 = (__dmr2048)vdmrpp; // expected-error {{used type '__dmr2048' where arithmetic or pointer type is required}}189}190