This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Is this a bug?
- From: David Daney <ddaney at caviumnetworks dot com>
- To: Honggang Xu <hxu at zeugmasystems dot com>
- Cc: gcc-help at gcc dot gnu dot org
- Date: Thu, 16 Jul 2009 11:18:49 -0700
- Subject: Re: Is this a bug?
- References: <DDFD17CC94A9BD49A82147DDF7D545C50176D5AE@exchange.ZeugmaSystems.local> <DDFD17CC94A9BD49A82147DDF7D545C501CFB20D@exchange.ZeugmaSystems.local>
Honggang Xu wrote:
Or my understand of keyword "volatile" is wrong, following code outputs
compiled by gcc 4.1.1: x=22 ,y=59
main()
{
volatile int x=20,y=35;
x=y++ + x++;
y= ++y + ++x;
printf("x=%d y=%d\n" ,x,y);
}
Your program has undefined behavior, the volatile may change the output,
but it doesn't change the fact that its behavior is undefined.
The problem is that the affect of the increment operator can take place
either before or after the affect of the assignment. The compiler can
order the affects any way that it desires between sequence points.
You might want to read up on sequence points:
http://en.wikipedia.org/wiki/Sequence_point
David Daney