OSDN Git Service

* rs6000.c (rs6000_handle_altivec_attribute_tree): Report errors
authorjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 2004 18:43:57 +0000 (18:43 +0000)
committerjanis <janis@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 14 Dec 2004 18:43:57 +0000 (18:43 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92154 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/altivec-types-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/altivec-types-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/altivec-types-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/altivec-types-4.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-types-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-types-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-types-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-types-4.c [new file with mode: 0644]

index 4368aea..a5b07df 100644 (file)
@@ -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
index 9a593fd..b2e64f6 100644 (file)
@@ -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;
index 720506d..28cd86c 100644 (file)
@@ -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
diff --git a/gcc/testsuite/g++.dg/ext/altivec-types-1.C b/gcc/testsuite/g++.dg/ext/altivec-types-1.C
new file mode 100644 (file)
index 0000000..9ebab95
--- /dev/null
@@ -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" "" } */
diff --git a/gcc/testsuite/g++.dg/ext/altivec-types-2.C b/gcc/testsuite/g++.dg/ext/altivec-types-2.C
new file mode 100644 (file)
index 0000000..4f4d3f3
--- /dev/null
@@ -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" "" } */
diff --git a/gcc/testsuite/g++.dg/ext/altivec-types-3.C b/gcc/testsuite/g++.dg/ext/altivec-types-3.C
new file mode 100644 (file)
index 0000000..42fd3ca
--- /dev/null
@@ -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" "" } */
diff --git a/gcc/testsuite/g++.dg/ext/altivec-types-4.C b/gcc/testsuite/g++.dg/ext/altivec-types-4.C
new file mode 100644 (file)
index 0000000..bc2296c
--- /dev/null
@@ -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;
diff --git a/gcc/testsuite/gcc.dg/altivec-types-1.c b/gcc/testsuite/gcc.dg/altivec-types-1.c
new file mode 100644 (file)
index 0000000..0772abc
--- /dev/null
@@ -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" "" } */
diff --git a/gcc/testsuite/gcc.dg/altivec-types-2.c b/gcc/testsuite/gcc.dg/altivec-types-2.c
new file mode 100644 (file)
index 0000000..4f4d3f3
--- /dev/null
@@ -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" "" } */
diff --git a/gcc/testsuite/gcc.dg/altivec-types-3.c b/gcc/testsuite/gcc.dg/altivec-types-3.c
new file mode 100644 (file)
index 0000000..42fd3ca
--- /dev/null
@@ -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" "" } */
diff --git a/gcc/testsuite/gcc.dg/altivec-types-4.c b/gcc/testsuite/gcc.dg/altivec-types-4.c
new file mode 100644 (file)
index 0000000..bc2296c
--- /dev/null
@@ -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;