[multiple changes]
authorAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 29 May 2007 00:25:25 +0000 (17:25 -0700)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 29 May 2007 00:25:25 +0000 (17:25 -0700)
2007-05-28  Andrew Pinski  <Andrew_pinski@playstation.sony.com>

        PR c/31339
        * c-typeck.c (build_unary_op <case PREINCREMENT_EXPR,
        case POSTINCREMENT_EXPR, case PREDECREMENT_EXPR,
        case POSTDECREMENT_EXPR>): Return the error_mark_node
        if either the real or imaginary parts would an
        error_mark_node.

2007-05-28  Andrew Pinski  <Andrew_pinski@playstation.sony.com>

        PR c++/31339
        * typeck.c (build_unary_op <case PREINCREMENT_EXPR,
        case POSTINCREMENT_EXPR, case PREDECREMENT_EXPR,
        case POSTDECREMENT_EXPR>): Return the error_mark_node
        if either the real or imaginary parts would an
        error_mark_node.

2007-05-28  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR c/31339
        * gcc.dg/boolcomplex-1.c: New test.

        PR c++/31339
        * g++.dg/ext/boolcomplex-1.c: New test

From-SVN: r125156

gcc/ChangeLog
gcc/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/typeck.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/boolcomplex-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/boolcomplex-1.c [new file with mode: 0644]

index bcdd44b4fa96d117a79fc0fe93819a9e3723dc36..1ca63349ec5b70a34cadd1c5ebad51b9d32b4ea2 100644 (file)
@@ -1,3 +1,12 @@
+2007-05-28  Andrew Pinski  <Andrew_pinski@playstation.sony.com>
+
+       PR c/31339
+       * c-typeck.c (build_unary_op <case PREINCREMENT_EXPR,
+       case POSTINCREMENT_EXPR, case PREDECREMENT_EXPR,
+       case POSTDECREMENT_EXPR>): Return the error_mark_node
+       if either the real or imaginary parts would an
+       error_mark_node.
+
 2007-05-28  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-ssa-dce.c (eliminate_unnecessary_stmts): Release LHS SSA
index dccf9229965d4277f5fcd4a371128ed4710110e6..a4eed3fe36964613b275f1f5eebcb0eb50716359 100644 (file)
@@ -2908,8 +2908,11 @@ build_unary_op (enum tree_code code, tree xarg, int flag)
          arg = stabilize_reference (arg);
          real = build_unary_op (REALPART_EXPR, arg, 1);
          imag = build_unary_op (IMAGPART_EXPR, arg, 1);
+         real = build_unary_op (code, real, 1);
+         if (real == error_mark_node || imag == error_mark_node)
+           return error_mark_node;
          return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
-                        build_unary_op (code, real, 1), imag);
+                        real, imag);
        }
 
       /* Report invalid types.  */
index 5b4d88c98a3c0a595e69ff06b0def124308d94af..9dca96afcad6977971c5f0172914ccc88870a302 100644 (file)
@@ -1,3 +1,12 @@
+2007-05-28  Andrew Pinski  <Andrew_pinski@playstation.sony.com>
+
+        PR c++/31339
+       * typeck.c (build_unary_op <case PREINCREMENT_EXPR,
+       case POSTINCREMENT_EXPR, case PREDECREMENT_EXPR,
+       case POSTDECREMENT_EXPR>): Return the error_mark_node
+       if either the real or imaginary parts would an
+       error_mark_node.
+       
 2007-05-25  Simon Martin  <simartin@users.sourceforge.net>
            Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
index fa0c956dc73674e67cd66baa9e8c6d16f8693260..af2133085eda507a3e6190b4181517d745ab38ea 100644 (file)
@@ -4221,8 +4221,11 @@ build_unary_op (enum tree_code code, tree xarg, int noconvert)
          arg = stabilize_reference (arg);
          real = build_unary_op (REALPART_EXPR, arg, 1);
          imag = build_unary_op (IMAGPART_EXPR, arg, 1);
+         real = build_unary_op (code, real, 1);
+         if (real == error_mark_node || imag == error_mark_node)
+           return error_mark_node;
          return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
-                        build_unary_op (code, real, 1), imag);
+                        real, imag);
        }
 
       /* Report invalid types.  */
index 863a060e4b8988a575698453c84ccacd21ae8f63..6697e0dfa7c2d9d1d4084cddf3da50e219a46a66 100644 (file)
@@ -1,3 +1,11 @@
+2007-05-28  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR c/31339
+       * gcc.dg/boolcomplex-1.c: New test.
+
+       PR c++/31339
+       * g++.dg/ext/boolcomplex-1.c: New test.
+
 2007-05-28  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/32124
diff --git a/gcc/testsuite/g++.dg/ext/boolcomplex-1.c b/gcc/testsuite/g++.dg/ext/boolcomplex-1.c
new file mode 100644 (file)
index 0000000..d05d9bb
--- /dev/null
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+bool b = --0i == 0; /* { dg-error "lvalue required as decrement operand" } */
diff --git a/gcc/testsuite/gcc.dg/boolcomplex-1.c b/gcc/testsuite/gcc.dg/boolcomplex-1.c
new file mode 100644 (file)
index 0000000..c34da04
--- /dev/null
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+_Bool b = --0i == 0; /* { dg-error "lvalue required as decrement operand" } */