OSDN Git Service

2007-05-28 Andrew Pinski <Andrew_pinski@playstation.sony.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 May 2007 00:25:25 +0000 (00:25 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 29 May 2007 00:25:25 +0000 (00:25 +0000)
        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

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

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 bcdd44b..1ca6334 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
 2007-05-28  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-ssa-dce.c (eliminate_unnecessary_stmts): Release LHS SSA
index dccf922..a4eed3f 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);
          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),
          return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
-                        build_unary_op (code, real, 1), imag);
+                        real, imag);
        }
 
       /* Report invalid types.  */
        }
 
       /* Report invalid types.  */
index 5b4d88c..9dca96a 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>
 
 2007-05-25  Simon Martin  <simartin@users.sourceforge.net>
            Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
index fa0c956..af21330 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);
          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),
          return build2 (COMPLEX_EXPR, TREE_TYPE (arg),
-                        build_unary_op (code, real, 1), imag);
+                        real, imag);
        }
 
       /* Report invalid types.  */
        }
 
       /* Report invalid types.  */
index 863a060..6697e0d 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
 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" } */