re PR c/30428 (vector float | vector float is accepted)
authorAndrew Pinski <pinskia@gmail.com>
Tue, 14 Aug 2007 09:24:26 +0000 (02:24 -0700)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 14 Aug 2007 09:24:26 +0000 (02:24 -0700)
2007-08-14  Andrew Pinski  <pinskia@gmail.com>

        PR c/30428
        * c-typeck.c (build_binary_op): Disallow vector float types with
        BIT_IOR_EXPR, BIT_AND_EXPR, and BIT_XOR_EXPR.

2007-08-14  Andrew Pinski  <pinskia@gmail.com>

        PR c++/30428
        * typeck.c (build_binary_op): Disallow vector float types with
        BIT_IOR_EXPR, BIT_AND_EXPR, and BIT_XOR_EXPR.

2007-08-14  Andrew Pinski  <pinskia@gmail.com>

        PR c/30428
        * gcc.dg/vector-2.c: New test.

        PR c++/30428
        * g++.dg/ext/vector8.C: New test.

From-SVN: r127477

gcc/ChangeLog
gcc/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/vector8.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/vector-2.c [new file with mode: 0644]

index 08c819d6b492d587313d61ff85806c1de8fdeee5..72c9401fa1450123977c4857fbc45eb5f10d5f29 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-14  Andrew Pinski  <pinskia@gmail.com>
+
+       PR c/30428
+       * c-typeck.c (build_binary_op): Disallow vector float types with
+       BIT_IOR_EXPR, BIT_AND_EXPR, and BIT_XOR_EXPR.
+
 2007-08-14  Maxim Kuvyrkov  <maxim@codesourcery.com>
 
        * sched-int.h (struct _dep): Rename field 'kind' to 'type'.
index 4fb70923d4815d383dd8f8f9597a21a77372bdba..9a63f1ec8ca61d4465f161adfde75994d3c52a75 100644 (file)
@@ -7892,7 +7892,11 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
     case BIT_XOR_EXPR:
       if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
        shorten = -1;
-      else if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE)
+      /* Allow vector types which are not floating point types.   */
+      else if (code0 == VECTOR_TYPE
+              && code1 == VECTOR_TYPE
+              && !VECTOR_FLOAT_TYPE_P (type0)
+              && !VECTOR_FLOAT_TYPE_P (type1))
        common = 1;
       break;
 
index f7587f915d36647a772a09eb17ff386bd8f9af12..d7706afc7a485ec4c6da776472d69e6b2d5428e8 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-14  Andrew Pinski  <pinskia@gmail.com>
+
+       PR c++/30428
+       * typeck.c (build_binary_op): Disallow vector float types with
+       BIT_IOR_EXPR, BIT_AND_EXPR, and BIT_XOR_EXPR.
+
 2007-08-11  Ian Lance Taylor  <iant@google.com>
 
        * cp-objcp-common.c (cxx_get_alias_set): Change return type to
index 944b1176da91eff39090fc9d92320addfbe8b905..d2e095c634e6d1cca89fd258183078ef1a78e3fa 100644 (file)
@@ -3214,7 +3214,9 @@ build_binary_op (enum tree_code code, tree orig_op0, tree orig_op1,
     case BIT_IOR_EXPR:
     case BIT_XOR_EXPR:
       if ((code0 == INTEGER_TYPE && code1 == INTEGER_TYPE)
-         || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE))
+         || (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE
+             && !VECTOR_FLOAT_TYPE_P (type0)
+             && !VECTOR_FLOAT_TYPE_P (type1)))
        shorten = -1;
       break;
 
index 8b1e57f38e55fb4d847cc86e69c90badef34dd09..c55d2df2427b12d405063d50546791a5b32981d3 100644 (file)
@@ -1,3 +1,11 @@
+2007-08-14  Andrew Pinski  <pinskia@gmail.com>
+
+       PR c/30428
+       * gcc.dg/vector-2.c: New test.
+
+       PR c++/30428
+       * g++.dg/ext/vector8.C: New test.
+
 2007-08-13  Dan Hipschman  <dsh@google.com>
 
        PR c/32953
diff --git a/gcc/testsuite/g++.dg/ext/vector8.C b/gcc/testsuite/g++.dg/ext/vector8.C
new file mode 100644 (file)
index 0000000..5f9f956
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+/* Check for application of |, ^, and & on vector types.  */
+#define vector __attribute__((vector_size(16) ))
+
+vector float a;
+vector int a1;
+vector float b;
+vector int b1;
+
+int f(void)
+{
+ a =  a | b; /* { dg-error "" } */
+ a =  a & b; /* { dg-error "" } */
+ a =  a ^ b; /* { dg-error "" } */
+ a1 =  a1 | b1;
+ a1 =  a1 & b1;
+ a1 =  a1 ^ b1;
+}
+
diff --git a/gcc/testsuite/gcc.dg/vector-2.c b/gcc/testsuite/gcc.dg/vector-2.c
new file mode 100644 (file)
index 0000000..5f9f956
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+/* Check for application of |, ^, and & on vector types.  */
+#define vector __attribute__((vector_size(16) ))
+
+vector float a;
+vector int a1;
+vector float b;
+vector int b1;
+
+int f(void)
+{
+ a =  a | b; /* { dg-error "" } */
+ a =  a & b; /* { dg-error "" } */
+ a =  a ^ b; /* { dg-error "" } */
+ a1 =  a1 | b1;
+ a1 =  a1 & b1;
+ a1 =  a1 ^ b1;
+}
+