re PR c++/28989 (post-increment of bool variable accepted as lvalue)
authorAndrew Pinski <andrew_pinski@playstation.sony.com>
Fri, 17 Aug 2007 22:14:47 +0000 (22:14 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Fri, 17 Aug 2007 22:14:47 +0000 (15:14 -0700)
2007-08-17  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR c++/28989
        * tree.c (lvalue_p_1 <case SAVE_EXPR>): SAVE_EXPRs are never
        lvalues.

2007-08-17  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR c++/28989
        * g++.dg/expr/lval3.C: New test.
        * g++.dg/expr/lval4.C: New test.

From-SVN: r127603

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/expr/lval3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/expr/lval4.C [new file with mode: 0644]

index 9556496041fc8a5e379f22652bce384e7d4de3a7..3fd17c4f1914023874f3a8427171d75dbcb8dee3 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-17  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR c++/28989
+       * tree.c (lvalue_p_1 <case SAVE_EXPR>): SAVE_EXPRs are never
+       lvalues.
+
 2007-08-17  Ollie Wild  <aaw@google.com>
 
        PR c++/31749
index 792f1fd0909b626a012e920c3292608914d7d146..1d16f2c860aaf5ba70b6630579fecbd1831fcd4b 100644 (file)
@@ -92,11 +92,12 @@ lvalue_p_1 (tree ref,
 
   switch (TREE_CODE (ref))
     {
+    case SAVE_EXPR:
+      return clk_none;
       /* preincrements and predecrements are valid lvals, provided
         what they refer to are valid lvals.  */
     case PREINCREMENT_EXPR:
     case PREDECREMENT_EXPR:
-    case SAVE_EXPR:
     case TRY_CATCH_EXPR:
     case WITH_CLEANUP_EXPR:
     case REALPART_EXPR:
index 2a637d5f372b66eb6815cd6d5a926b879b200e6f..e09738cc4f4b81768abaceeff27f9cdfc50ae98d 100644 (file)
@@ -1,3 +1,9 @@
+2007-08-17  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR c++/28989
+       * g++.dg/expr/lval3.C: New test.
+       * g++.dg/expr/lval4.C: New test.
+
 2007-08-17  Ollie Wild  <aaw@google.com>
 
        PR c++/31749
diff --git a/gcc/testsuite/g++.dg/expr/lval3.C b/gcc/testsuite/g++.dg/expr/lval3.C
new file mode 100644 (file)
index 0000000..f106e69
--- /dev/null
@@ -0,0 +1,9 @@
+// i++ is never an lvalue
+void
+f()
+{
+  bool i = 0;
+  i++ = 3; // { dg-error "" }
+}
+
+
diff --git a/gcc/testsuite/g++.dg/expr/lval4.C b/gcc/testsuite/g++.dg/expr/lval4.C
new file mode 100644 (file)
index 0000000..c66e2f6
--- /dev/null
@@ -0,0 +1,9 @@
+// ++i is always an lvalue
+void
+f()
+{
+  bool i = 0;
+  ++i = 3;
+}
+
+