c-typeck.c (pedantic_lvalue_warning): Deprecate compound expressions as lvalues.
authorJoseph Myers <jsm@polyomino.org.uk>
Sat, 8 Nov 2003 01:38:48 +0000 (01:38 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Sat, 8 Nov 2003 01:38:48 +0000 (01:38 +0000)
* c-typeck.c (pedantic_lvalue_warning): Deprecate compound
expressions as lvalues.
(internal_build_compound_expr): Remove special handling for
non-pedantic case.
* doc/extend.texi: Document that all extended lvalues are now
deprecated.

testsuite:
* gcc.dg/compound-lvalue-1.c: New test.
* gcc.dg/c90-const-expr-2.c, gcc.dg/c99-const-expr-2.c: Remove
some XFAILs.

From-SVN: r73352

gcc/ChangeLog
gcc/c-typeck.c
gcc/doc/extend.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/c90-const-expr-2.c
gcc/testsuite/gcc.dg/c99-const-expr-2.c
gcc/testsuite/gcc.dg/compound-lvalue-1.c [new file with mode: 0644]

index 80f1b5f5dc27f22dd137e195dfa5d1767a82fa80..af24a904bf458cc210dfe9749f369f124015ce8a 100644 (file)
@@ -1,3 +1,12 @@
+2003-11-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       * c-typeck.c (pedantic_lvalue_warning): Deprecate compound
+       expressions as lvalues.
+       (internal_build_compound_expr): Remove special handling for
+       non-pedantic case.
+       * doc/extend.texi: Document that all extended lvalues are now
+       deprecated.
+
 2003-11-07  Geoffrey Keating  <geoffk@apple.com>
 
        PR 11654
index 81eee375f39e245b6f2a75e23b6370dac5fab1cd..fc6dc5952ba7ba9f3bbf852829912d36625c9cf8 100644 (file)
@@ -2591,8 +2591,7 @@ pedantic_lvalue_warning (enum tree_code code)
       pedwarn ("use of conditional expressions as lvalues is deprecated");
       break;
     case COMPOUND_EXPR:
-      if (pedantic)
-       pedwarn ("ISO C forbids use of compound expressions as lvalues");
+      pedwarn ("use of compound expressions as lvalues is deprecated");
       break;
     default:
       pedwarn ("use of cast expressions as lvalues is deprecated");
@@ -2903,11 +2902,6 @@ internal_build_compound_expr (tree list, int first_p)
            && ! (TREE_CODE (TREE_VALUE (list)) == CONVERT_EXPR
                 && VOID_TYPE_P (TREE_TYPE (TREE_VALUE (list)))))
         warning ("left-hand operand of comma expression has no effect");
-
-      /* When pedantic, a compound expression can be neither an lvalue
-         nor an integer constant expression.  */
-      if (! pedantic)
-        return rest;
     }
 
   /* With -Wunused, we should also warn if the left-hand operand does have
index e2982929e587e4105264d11cba1a925726af009e..fdc1c7c682766836585bf7a03fd9285e33363535 100644 (file)
@@ -1069,7 +1069,8 @@ This will work with all versions of GCC@.
 
 Compound expressions, conditional expressions and casts are allowed as
 lvalues provided their operands are lvalues.  This means that you can take
-their addresses or store values into them.
+their addresses or store values into them.  All these extensions are
+deprecated.
 
 Standard C++ allows compound expressions and conditional expressions
 as lvalues, and permits casts to reference type, so use of this
index 8390d019143676470e4593df48065025f3b5be14..9cf4afd7b8baba70e36f1efb53f157bff6e15326 100644 (file)
@@ -1,3 +1,9 @@
+2003-11-08  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       * gcc.dg/compound-lvalue-1.c: New test.
+       * gcc.dg/c90-const-expr-2.c, gcc.dg/c99-const-expr-2.c: Remove
+       some XFAILs.
+
 2003-11-06  Geoffrey Keating  <geoffk@apple.com>
 
        * gcc.dg/altivec-varargs-1.c: New test.
index 746093bebcf130bbe29e39284dcc5274f985d9b7..7363e2a2e2cfaeab2c8abf306998f6544ca7d507 100644 (file)
@@ -30,7 +30,7 @@ foo (void)
   ASSERT_NPC ((void *)0);
   ASSERT_NOT_NPC ((void *)(void *)0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
   ASSERT_NOT_NPC ((void *)(char *)0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
-  ASSERT_NOT_NPC ((void *)(0, 0)); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
+  ASSERT_NOT_NPC ((void *)(0, 0)); /* { dg-bogus "incompatible" "bogus null pointer constant" } */
   ASSERT_NOT_NPC ((void *)(&"Foobar"[0] - &"Foobar"[0])); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
   /* This last one is a null pointer constant in C99 only.  */
   ASSERT_NOT_NPC ((void *)(1 ? 0 : (0, 0))); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
index c9f8e0ffbc8c424b469838f8c4fec9f941f50291..1ba1b4a674a689a318a7d43de51442e58c8e2f2e 100644 (file)
@@ -30,7 +30,7 @@ foo (void)
   ASSERT_NPC ((void *)0);
   ASSERT_NOT_NPC ((void *)(void *)0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
   ASSERT_NOT_NPC ((void *)(char *)0); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
-  ASSERT_NOT_NPC ((void *)(0, 0)); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
+  ASSERT_NOT_NPC ((void *)(0, 0)); /* { dg-bogus "incompatible" "bogus null pointer constant" } */
   ASSERT_NOT_NPC ((void *)(&"Foobar"[0] - &"Foobar"[0])); /* { dg-bogus "incompatible" "bogus null pointer constant" { xfail *-*-* } } */
   /* This last one is a null pointer constant in C99 only.  */
   ASSERT_NPC ((void *)(1 ? 0 : (0, 0)));
diff --git a/gcc/testsuite/gcc.dg/compound-lvalue-1.c b/gcc/testsuite/gcc.dg/compound-lvalue-1.c
new file mode 100644 (file)
index 0000000..c77403d
--- /dev/null
@@ -0,0 +1,12 @@
+/* Test for deprecation of compound expressions as lvalues.  */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+int x, y;
+
+void
+foo (void)
+{
+  (x, y) = 1; /* { dg-warning "lvalue" "compound expression as lvalue deprecated" } */
+}