[Bug c++/7503] (x < Y ? X : Y) used for assignment causes wrong code

cvs-commit at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue Sep 21 16:20:00 GMT 2004


------- Additional Comments From cvs-commit at gcc dot gnu dot org  2004-09-21 16:20 -------
Subject: Bug 7503

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	sayle@gcc.gnu.org	2004-09-21 16:20:12

Modified files:
	gcc/cp         : ChangeLog tree.c typeck.c 
	gcc/testsuite  : ChangeLog 
Added files:
	gcc/testsuite/g++.dg/opt: pr7503-1.C pr7503-2.C pr7503-3.C 
	                          pr7503-4.C pr7503-5.C 

Log message:
	PR c++/7503
	* tree.c (lvalue_p_1):  Disallow MIN_EXPR and MAX_EXPR as lvalues
	if either operand has side-effects.
	* typeck.c (rationalize_conditional_expr): Assert that neither
	operand of MIN_EXPR or MAX_EXPR has side-effects.
	(build_modify_expr):  Add support for MIN_EXPR and MAX_EXPR.
	Check that the "lhs" is a valid lvalue, i.e. that neither operand
	of a MIN_EXPR or MAX_EXPR has a side-effect.
	
	* g++.dg/opt/pr7503-1.C: New testcase for COND_EXPR lvalues.
	* g++.dg/opt/pr7503-2.C: New testcase for <? and >? lvalues.
	* g++.dg/opt/pr7503-3.C: New testcase for invalid <? lvalue errors.
	* g++.dg/opt/pr7503-4.C: New testcase for <?= and >?= assignments.
	* g++.dg/opt/pr7503-5.C: New testcase for side-effects with <?=.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4371&r2=1.4372
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/tree.c.diff?cvsroot=gcc&r1=1.410&r2=1.411
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/typeck.c.diff?cvsroot=gcc&r1=1.577&r2=1.578
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.4325&r2=1.4326
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/opt/pr7503-1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/opt/pr7503-2.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/opt/pr7503-3.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/opt/pr7503-4.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/opt/pr7503-5.C.diff?cvsroot=gcc&r1=NONE&r2=1.1



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=7503



More information about the Gcc-bugs mailing list