]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Handle vector increment/decrement in build_unary_op
authorTom de Vries <tom@codesourcery.com>
Wed, 27 Nov 2013 10:00:48 +0000 (10:00 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Wed, 27 Nov 2013 10:00:48 +0000 (10:00 +0000)
2013-11-27  Tom de Vries  <tom@codesourcery.com>
    Marc Glisse  <marc.glisse@inria.fr>

PR c++/59032
* c-typeck.c (build_unary_op): Allow vector increment and decrement.

* typeck.c (cp_build_unary_op): Allow vector increment and decrement.

* c-c++-common/pr59032.c: New testcase.

Co-Authored-By: Marc Glisse <marc.glisse@inria.fr>
From-SVN: r205439

gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/pr59032.c [new file with mode: 0644]

index 333aa11d7f2a4694e95a1690e737d9ab01e5ec12..1b7af32a0cca94646493d6f9c6e5adf40a47a663 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
+           Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c++/59032
+       * c-typeck.c (build_unary_op): Allow vector increment and decrement.
+
 2013-11-22  Andrew MacLeod  <amacleod@redhat.com>
 
        * c-typeck.c: Add required include files from gimple.h.
index 0c9c8c855b27b0de8c6251562bd0542fde257880..f602ca4eb544fd79c239731789dcfa36bfc5806b 100644 (file)
@@ -3982,7 +3982,7 @@ build_unary_op (location_t location,
 
       if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
          && typecode != INTEGER_TYPE && typecode != REAL_TYPE
-         && typecode != COMPLEX_TYPE)
+         && typecode != COMPLEX_TYPE && typecode != VECTOR_TYPE)
        {
          if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
            error_at (location, "wrong type argument to increment");
@@ -4047,7 +4047,9 @@ build_unary_op (location_t location,
          }
        else
          {
-           inc = integer_one_node;
+           inc = VECTOR_TYPE_P (argtype)
+             ? build_one_cst (argtype)
+             : integer_one_node;
            inc = convert (argtype, inc);
          }
 
index 8c5ec0a9556ac8dee7944692304e37290940aaf2..4d4e0e4b22f70ab4e85d77948276c702483fa7c0 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
+           Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c++/59032
+       * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
+
 2013-11-27  Tom de Vries  <tom@codesourcery.com>
            Marc Glisse  <marc.glisse@inria.fr>
 
index a4da037db33f9b65fdd29e544bdffde648a3d2e8..9f9f7b6775b6a784da164bf4569837537007454e 100644 (file)
@@ -5748,7 +5748,9 @@ cp_build_unary_op (enum tree_code code, tree xarg, int noconvert,
            inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
          }
        else
-         inc = integer_one_node;
+         inc = VECTOR_TYPE_P (argtype)
+           ? build_one_cst (argtype)
+           : integer_one_node;
 
        inc = cp_convert (argtype, inc, complain);
 
index ca48472dc9041b3d1d07091dff707855d1341915..6cf7c386ae69e9a24f47fad07c82d9192beb37d5 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
+           Marc Glisse  <marc.glisse@inria.fr>
+
+       PR c++/59032
+       * c-c++-common/pr59032.c: New testcase.
+
 2013-11-27  Tom de Vries  <tom@codesourcery.com>
            Marc Glisse  <marc.glisse@inria.fr>
 
diff --git a/gcc/testsuite/c-c++-common/pr59032.c b/gcc/testsuite/c-c++-common/pr59032.c
new file mode 100644 (file)
index 0000000..327f5ae
--- /dev/null
@@ -0,0 +1,30 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+void
+foo()
+{
+  float v __attribute__((vector_size(8)));
+  v++;
+}
+
+void
+foo2 ()
+{
+  float v __attribute__((vector_size(8)));
+  ++v;
+}
+
+void
+foo3 ()
+{
+  float v __attribute__((vector_size(8)));
+  v--;
+}
+
+void
+foo4 ()
+{
+  float v __attribute__((vector_size(8)));
+  --v;
+}