* c-typeck.c (pedantic_lvalue_warning): Deprecate compound
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 Nov 2003 01:38:48 +0000 (01:38 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 Nov 2003 01:38:48 +0000 (01:38 +0000)
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.

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

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 80f1b5f..af24a90 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 81eee37..fc6dc59 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 e298292..fdc1c7c 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 8390d01..9cf4afd 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 746093b..7363e2a 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 c9f8e0f..1ba1b4a 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" } */
+}