rs6000.c (rs6000_handle_altivec_attribute_tree): Report errors for vector types with invalid component types.
* rs6000.c (rs6000_handle_altivec_attribute_tree): Report errors for vector types with invalid component types. testsuite: * gcc.dg/altivec-types-1.c: New test. * gcc.dg/altivec-types-2.c: New test. * gcc.dg/altivec-types-3.c: New test. * gcc.dg/altivec-types-4.c: New test. * g++.dg/ext/altivec-types-1.C: New test. * g++.dg/ext/altivec-types-2.C: New test. * g++.dg/ext/altivec-types-3.C: New test. * g++.dg/ext/altivec-types-4.C: New test. Co-Authored-By: Janis Johnson <janis187@us.ibm.com> From-SVN: r92154
This commit is contained in:
parent
29bfcb6de7
commit
f90ac3f0e4
|
@ -1,3 +1,9 @@
|
|||
2004-12-14 Uttam Pawar <uttamp@us.ibm.com>
|
||||
Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
* rs6000.c (rs6000_handle_altivec_attribute_tree): Report errors
|
||||
for vector types with invalid component types.
|
||||
|
||||
2004-12-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/18951
|
||||
|
|
|
@ -16999,7 +16999,9 @@ const struct attribute_spec rs6000_attribute_table[] =
|
|||
given declaration. */
|
||||
|
||||
static tree
|
||||
rs6000_handle_altivec_attribute (tree *node, tree name, tree args,
|
||||
rs6000_handle_altivec_attribute (tree *node,
|
||||
tree name ATTRIBUTE_UNUSED,
|
||||
tree args,
|
||||
int flags ATTRIBUTE_UNUSED,
|
||||
bool *no_add_attrs)
|
||||
{
|
||||
|
@ -17020,9 +17022,25 @@ rs6000_handle_altivec_attribute (tree *node, tree name, tree args,
|
|||
|
||||
mode = TYPE_MODE (type);
|
||||
|
||||
if (rs6000_warn_altivec_long
|
||||
&& (type == long_unsigned_type_node || type == long_integer_type_node))
|
||||
warning ("use of 'long' in AltiVec types is deprecated; use 'int'");
|
||||
/* Check for invalid AltiVec type qualifiers. */
|
||||
if (type == long_unsigned_type_node || type == long_integer_type_node)
|
||||
{
|
||||
if (TARGET_64BIT)
|
||||
error ("use of %<long%> in AltiVec types is invalid for 64-bit code");
|
||||
else if (rs6000_warn_altivec_long)
|
||||
warning ("use of %<long%> in AltiVec types is deprecated; use %<int%>");
|
||||
}
|
||||
else if (type == long_long_unsigned_type_node
|
||||
|| type == long_long_integer_type_node)
|
||||
error ("use of %<long long%> in AltiVec types is invalid");
|
||||
else if (type == double_type_node)
|
||||
error ("use of %<double%> in AltiVec types is invalid");
|
||||
else if (type == long_double_type_node)
|
||||
error ("use of %<long double%> in AltiVec types is invalid");
|
||||
else if (type == boolean_type_node)
|
||||
error ("use of boolean types in AltiVec types is invalid");
|
||||
else if (TREE_CODE (type) == COMPLEX_TYPE)
|
||||
error ("use of %<complex%> in AltiVec types is invalid");
|
||||
|
||||
switch (altivec_type)
|
||||
{
|
||||
|
@ -17071,9 +17089,7 @@ rs6000_handle_altivec_attribute (tree *node, tree name, tree args,
|
|||
|
||||
*no_add_attrs = true; /* No need to hang on to the attribute. */
|
||||
|
||||
if (!result)
|
||||
warning ("%qs attribute ignored", IDENTIFIER_POINTER (name));
|
||||
else
|
||||
if (result)
|
||||
*node = reconstruct_complex_type (*node, result);
|
||||
|
||||
return NULL_TREE;
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
2004-12-14 Janis Johnson <janis187@us.ibm.com
|
||||
|
||||
* gcc.dg/altivec-types-1.c: New test.
|
||||
* gcc.dg/altivec-types-2.c: New test.
|
||||
* gcc.dg/altivec-types-3.c: New test.
|
||||
* gcc.dg/altivec-types-4.c: New test.
|
||||
* g++.dg/ext/altivec-types-1.C: New test.
|
||||
* g++.dg/ext/altivec-types-2.C: New test.
|
||||
* g++.dg/ext/altivec-types-3.C: New test.
|
||||
* g++.dg/ext/altivec-types-4.C: New test.
|
||||
|
||||
2004-12-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/18951
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* Valid AltiVec vector types should be accepted with no warnings. */
|
||||
|
||||
__vector char vc;
|
||||
__vector unsigned char vuc;
|
||||
__vector signed char vsc;
|
||||
__vector __bool char vbc;
|
||||
__vector short vh;
|
||||
__vector signed short vsh;
|
||||
__vector unsigned short vuh;
|
||||
__vector short int vhi;
|
||||
__vector signed short int vshi;
|
||||
__vector unsigned short int vuhi;
|
||||
__vector __bool short vbh;
|
||||
__vector __bool short int vbhi;
|
||||
__vector int vi;
|
||||
__vector unsigned int vui;
|
||||
__vector signed int vsi;
|
||||
__vector __bool int vbi;
|
||||
__vector unsigned vuj;
|
||||
__vector signed vsj;
|
||||
__vector __bool vbj;
|
||||
__vector float vf;
|
||||
|
||||
/* These should be rejected as invalid AltiVec types. */
|
||||
|
||||
__vector bool vb; /* { dg-error "AltiVec types" "" } */
|
||||
__vector long long vll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector unsigned long long vull; /* { dg-error "AltiVec types" "" } */
|
||||
__vector signed long long vsll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __bool long long vbll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector long long int vlli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector unsigned long long int vulli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector signed long long int vslli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __bool long long int vblli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector double vd1; /* { dg-error "AltiVec types" "" } */
|
||||
__vector long double vld; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex float vcf; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex double vcd; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex long double vcld; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex signed char vcsc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned char vcuc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex short vcss; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned short vcus; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex int vcsi; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned int vcui; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex long vcsl; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned long vcul; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex long long vcsll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned long long vcull; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex float v_cf; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex double v_cd; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex long double v_cld; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex signed char v_csc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned char v_cuc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex short v_css; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned short v_cus; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex int v_csi; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned int v_cui; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex long v_csl; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned long v_cul; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex long long v_csll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned long long v_cull; /* { dg-error "AltiVec types" "" } */
|
||||
|
||||
/* These should be rejected because the component types are invalid. We
|
||||
don't care about the actual error messages here. */
|
||||
|
||||
__vector __bool unsigned char vbuc; /* { dg-error "error" "" } */
|
||||
__vector __bool signed char vbsc; /* { dg-error "error" "" } */
|
||||
__vector __bool unsigned short vbuh; /* { dg-error "error" "" } */
|
||||
__vector __bool signed short vbsh; /* { dg-error "error" "" } */
|
||||
__vector __bool unsigned int vbui; /* { dg-error "error" "" } */
|
||||
__vector __bool signed int vbsi; /* { dg-error "error" "" } */
|
||||
__vector __bool unsigned vbuj; /* { dg-error "error" "" } */
|
||||
__vector __bool signed vbsj; /* { dg-error "error" "" } */
|
||||
__vector signed float vsf; /* { dg-error "error" "" } */
|
||||
__vector unsigned float vuf; /* { dg-error "error" "" } */
|
||||
__vector short float vsf; /* { dg-error "error" "" } */
|
||||
__vector signed double vsd; /* { dg-error "error" "" } */
|
||||
__vector unsigned double vud; /* { dg-error "error" "" } */
|
||||
__vector short double vsd; /* { dg-error "error" "" } */
|
||||
__vector __bool float vbf; /* { dg-error "error" "" } */
|
||||
__vector __bool double vbd; /* { dg-error "error" "" } */
|
||||
__vector __bool short float blf; /* { dg-error "error" "" } */
|
||||
__vector __bool short double vlbd; /* { dg-error "error" "" } */
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-require-effective-target ilp32 } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* These should get warnings for 32-bit code. */
|
||||
|
||||
__vector long vl; /* { dg-warning "deprecated" "" } */
|
||||
__vector unsigned long vul; /* { dg-warning "deprecated" "" } */
|
||||
__vector signed long vsl; /* { dg-warning "deprecated" "" } */
|
||||
__vector __bool long int vbli; /* { dg-warning "deprecated" "" } */
|
||||
__vector long int vli; /* { dg-warning "deprecated" "" } */
|
||||
__vector unsigned long int vuli; /* { dg-warning "deprecated" "" } */
|
||||
__vector signed long int vsli; /* { dg-warning "deprecated" "" } */
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-require-effective-target lp64 } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* These should be rejected for 64-bit code. */
|
||||
|
||||
__vector long vl; /* { dg-error "invalid for 64" "" } */
|
||||
__vector unsigned long vul; /* { dg-error "invalid for 64" "" } */
|
||||
__vector signed long vsl; /* { dg-error "invalid for 64" "" } */
|
||||
__vector __bool long int vbli; /* { dg-error "invalid for 64" "" } */
|
||||
__vector long int vli; /* { dg-error "invalid for 64" "" } */
|
||||
__vector unsigned long int vuli; /* { dg-error "invalid for 64" "" } */
|
||||
__vector signed long int vsli; /* { dg-error "invalid for 64" "" } */
|
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-require-effective-target ilp32 } */
|
||||
/* { dg-options "-maltivec -mno-warn-altivec-long" } */
|
||||
|
||||
/* These should not get warnings for 32-bit code when the warning is
|
||||
disabled. */
|
||||
|
||||
__vector long vl;
|
||||
__vector unsigned long vul;
|
||||
__vector signed long vsl;
|
||||
__vector __bool long int vbli;
|
||||
__vector long int vli;
|
||||
__vector unsigned long int vuli;
|
||||
__vector signed long int vsli;
|
|
@ -0,0 +1,87 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* Valid AltiVec vector types should be accepted with no warnings. */
|
||||
|
||||
__vector char vc;
|
||||
__vector unsigned char vuc;
|
||||
__vector signed char vsc;
|
||||
__vector __bool char vbc;
|
||||
__vector short vh;
|
||||
__vector signed short vsh;
|
||||
__vector unsigned short vuh;
|
||||
__vector short int vhi;
|
||||
__vector signed short int vshi;
|
||||
__vector unsigned short int vuhi;
|
||||
__vector __bool short vbh;
|
||||
__vector __bool short int vbhi;
|
||||
__vector int vi;
|
||||
__vector unsigned int vui;
|
||||
__vector signed int vsi;
|
||||
__vector __bool int vbi;
|
||||
__vector unsigned vuj;
|
||||
__vector signed vsj;
|
||||
__vector __bool vbj;
|
||||
__vector float vf;
|
||||
|
||||
/* These should be rejected as invalid AltiVec types. */
|
||||
|
||||
__vector long long vll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector unsigned long long vull; /* { dg-error "AltiVec types" "" } */
|
||||
__vector signed long long vsll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __bool long long vbll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector long long int vlli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector unsigned long long int vulli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector signed long long int vslli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __bool long long int vblli; /* { dg-error "AltiVec types" "" } */
|
||||
__vector double vd1; /* { dg-error "AltiVec types" "" } */
|
||||
__vector long double vld; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Bool vb; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex float vcf; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex double vcd; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex long double vcld; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex signed char vcsc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned char vcuc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex short vcss; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned short vcus; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex int vcsi; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned int vcui; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex long vcsl; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned long vcul; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex long long vcsll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector _Complex unsigned long long vcull; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex float v_cf; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex double v_cd; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex long double v_cld; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex signed char v_csc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned char v_cuc; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex short v_css; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned short v_cus; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex int v_csi; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned int v_cui; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex long v_csl; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned long v_cul; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex long long v_csll; /* { dg-error "AltiVec types" "" } */
|
||||
__vector __complex unsigned long long v_cull; /* { dg-error "AltiVec types" "" } */
|
||||
|
||||
/* These should be rejected because the component types are invalid. We
|
||||
don't care about the actual error messages here. */
|
||||
|
||||
__vector __bool unsigned char vbuc; /* { dg-error "error" "" } */
|
||||
__vector __bool signed char vbsc; /* { dg-error "error" "" } */
|
||||
__vector __bool unsigned short vbuh; /* { dg-error "error" "" } */
|
||||
__vector __bool signed short vbsh; /* { dg-error "error" "" } */
|
||||
__vector __bool unsigned int vbui; /* { dg-error "error" "" } */
|
||||
__vector __bool signed int vbsi; /* { dg-error "error" "" } */
|
||||
__vector __bool unsigned vbuj; /* { dg-error "error" "" } */
|
||||
__vector __bool signed vbsj; /* { dg-error "error" "" } */
|
||||
__vector signed float vsf; /* { dg-error "error" "" } */
|
||||
__vector unsigned float vuf; /* { dg-error "error" "" } */
|
||||
__vector short float vsf; /* { dg-error "error" "" } */
|
||||
__vector signed double vsd; /* { dg-error "error" "" } */
|
||||
__vector unsigned double vud; /* { dg-error "error" "" } */
|
||||
__vector short double vsd; /* { dg-error "error" "" } */
|
||||
__vector __bool float vbf; /* { dg-error "error" "" } */
|
||||
__vector __bool double vbd; /* { dg-error "error" "" } */
|
||||
__vector __bool short float blf; /* { dg-error "error" "" } */
|
||||
__vector __bool short double vlbd; /* { dg-error "error" "" } */
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-require-effective-target ilp32 } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* These should get warnings for 32-bit code. */
|
||||
|
||||
__vector long vl; /* { dg-warning "deprecated" "" } */
|
||||
__vector unsigned long vul; /* { dg-warning "deprecated" "" } */
|
||||
__vector signed long vsl; /* { dg-warning "deprecated" "" } */
|
||||
__vector __bool long int vbli; /* { dg-warning "deprecated" "" } */
|
||||
__vector long int vli; /* { dg-warning "deprecated" "" } */
|
||||
__vector unsigned long int vuli; /* { dg-warning "deprecated" "" } */
|
||||
__vector signed long int vsli; /* { dg-warning "deprecated" "" } */
|
|
@ -0,0 +1,13 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-require-effective-target lp64 } */
|
||||
/* { dg-options "-maltivec" } */
|
||||
|
||||
/* These should be rejected for 64-bit code. */
|
||||
|
||||
__vector long vl; /* { dg-error "invalid for 64" "" } */
|
||||
__vector unsigned long vul; /* { dg-error "invalid for 64" "" } */
|
||||
__vector signed long vsl; /* { dg-error "invalid for 64" "" } */
|
||||
__vector __bool long int vbli; /* { dg-error "invalid for 64" "" } */
|
||||
__vector long int vli; /* { dg-error "invalid for 64" "" } */
|
||||
__vector unsigned long int vuli; /* { dg-error "invalid for 64" "" } */
|
||||
__vector signed long int vsli; /* { dg-error "invalid for 64" "" } */
|
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile { target powerpc*-*-linux* } } */
|
||||
/* { dg-require-effective-target ilp32 } */
|
||||
/* { dg-options "-maltivec -mno-warn-altivec-long" } */
|
||||
|
||||
/* These should not get warnings for 32-bit code when the warning is
|
||||
disabled. */
|
||||
|
||||
__vector long vl;
|
||||
__vector unsigned long vul;
|
||||
__vector signed long vsl;
|
||||
__vector __bool long int vbli;
|
||||
__vector long int vli;
|
||||
__vector unsigned long int vuli;
|
||||
__vector signed long int vsli;
|
Loading…
Reference in New Issue