OSDN Git Service

2007-08-17 Andrew Pinski <andrew_pinski@playstation.sony.com>
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Aug 2007 22:14:47 +0000 (22:14 +0000)
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 17 Aug 2007 22:14:47 +0000 (22:14 +0000)
        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.

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

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 9556496..3fd17c4 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 792f1fd..1d16f2c 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 2a637d5..e09738c 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;
+}
+
+