https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92346

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This code is clearly undefined.

First you say eax is in eax and then then you say the register gets clobbered
by the inline-asm (and is set by the inline-asm).
But you only set the lower bits of the eax to be 1 in the inline-asm.

In the -O0 case, what is happening is eax is both the output register and the
clobbered.
In the -O2 case, the eax is not used as the output register but rather a
different one as eax would conflict with the clobber register.

You can see that effect by outputing %0 and %1 in the inline-asm template.

Basically the inline-asm is broken and is not expected to work the way you
expected it to work.

Reply via email to