[gnu.gcc.bug] bug in assignment containing side-effect

spee@qmfl.qmflp.JUNET (Paul SPEE) (07/11/89)

I was pointed out the following bug:

#include <ctype.h>

char	*string = "aBcDeF";

main()
{
     char *p = string;

     printf("%s\n", string);
     while (*p)
     {
	  *p++ = islower(*p) ? toupper(*p) : *p;
     }
     printf("%s\n", string);
}

SUN cc result:		gcc v1.22 result:
aBcDeF			aBcDeF
ABCDEF			BCDEF

The cause is that gcc evaluates the lhs first. Is this fixed in later
version or is this ANSI behavior?

Paul Spee	- spee%qmflp.junet@RELAY.CS.NET