c-typeck.c (pedantic_lvalue_warning): Deprecate compound expressions as lvalues.

* 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
This commit is contained in:
Joseph Myers 2003-11-08 01:38:48 +00:00 committed by Joseph Myers
parent 9b574a7758
commit 30321c396e
7 changed files with 32 additions and 10 deletions

View 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

View 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

View 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

View 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.

View 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 *-*-* } } */

View 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)));

View File

@ -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" } */
}