On 07 November 2006 16:33, Andrew Haley wrote:

> Ricardo FERNANDEZ PASCUAL writes:

>  > I have done some experiments to try to understand what is happening, and
>  > I am a bit confused by the bahavior of GCC. Consider the following C
>  > function:
>  >
>  > static struct { int w; } s;
>  >
>  > void wait (void) {
>  >   int t;
>  > loop:
>  >   t = *((volatile int *) &s.w);
>  >   if (t > 0) goto loop;
>  > }
>  >
>  >
>  > The code generated by "cc1 -O3" on x86 is:
>  >
>  > wait:
>  >         movl    s, %eax
>  >         pushl   %ebp
>  >         movl    %esp, %ebp
>  >         testl   %eax, %eax
>  >         jg      .L6
>  >         popl    %ebp
>  >         ret
>  > .L3:
>  > .L6:
>  >         jmp     .L6
>  >
>  >
>  > Which does not seem to respect the semantics of volatile. Is this the
>  > expected behavior or is this a bug?
> 
> I think it's a bug. 

>  > FWIW, the folowing function:

> which looks right.  A temporary shouldn't make any difference here.



  Can I just remind everyone we had a huge long thread with this discussion
last year and it might be worth reviewing.  Look for the thread titled
"volatile semantics" running from Tue 03/05/2005 09:42 to Tue 26/07/2005
00:09.  (We should try not to repeat too much of a three-month long debate!)




    cheers,
      DaveK
-- 
Can't think of a witty .sigline today....

Reply via email to