[cfe-commits] r161703 - in /cfe/trunk: include/clang/AST/Stmt.h lib/AST/Stmt.cpp

Richard Smith richard at metafoo.co.uk
Tue Aug 14 11:19:53 PDT 2012


On 13 Aug 2012 23:12, "Abramo Bagnara" <abramo.bagnara at gmail.com> wrote:
>
> Il 13/08/2012 23:54, Eli Friedman ha scritto:
> > On Mon, Aug 13, 2012 at 2:01 PM, Richard Smith <richard at metafoo.co.uk>
wrote:
> >> According to the documentation I can find[1], multiple __asm
constructs are
> >> separate statements. In particular, the documentation suggests that
here:
> >>
> >> void f() {
> >>   if (false)
> >>     __asm mov eax, ebx
> >>   __asm mov ebx, eax
> >> }
> >>
> >> the second __asm statement is not controlled by the 'if'. If the
> >> documentation is correct, we currently misparse this.
> >>
> >> [1] http://msdn.microsoft.com/en-us/library/45yd4tzz(v=vs.110).aspx
> >
> > I think clang's interpretation is actually right here, but someone
> > should actually try that on MSVC.
>
> void f(int x) {
>         if (x)
>                 __asm out dx, ax
>         __asm out dx, ax

What about these:

    if (x)
       __asm out dx, ax  __asm out dx, ax
    if (x)
       __asm out dx, ax ; __asm out dx, ax
    if (x)
        __asm out dx, ax ; out dx, ax

To my reading, the first two are two statements and the third is one
statement.
On 13 Aug 2012 23:12, "Abramo Bagnara" <abramo.bagnara at gmail.com> wrote:

> Il 13/08/2012 23:54, Eli Friedman ha scritto:
> > On Mon, Aug 13, 2012 at 2:01 PM, Richard Smith <richard at metafoo.co.uk>
> wrote:
> >> According to the documentation I can find[1], multiple __asm constructs
> are
> >> separate statements. In particular, the documentation suggests that
> here:
> >>
> >> void f() {
> >>   if (false)
> >>     __asm mov eax, ebx
> >>   __asm mov ebx, eax
> >> }
> >>
> >> the second __asm statement is not controlled by the 'if'. If the
> >> documentation is correct, we currently misparse this.
> >>
> >> [1] http://msdn.microsoft.com/en-us/library/45yd4tzz(v=vs.110).aspx
> >
> > I think clang's interpretation is actually right here, but someone
> > should actually try that on MSVC.
>
> void f(int x) {
>         if (x)
>                 __asm out dx, ax
>         __asm out dx, ax
>         if (x)
>                 __asm out dx, ax;
>         __asm out dx, ax;
>         if (x)
>                 __asm { out dx, ax };
>         __asm { out dx, ax };
>         if (x)
>                 __asm { out dx, ax }
>         __asm { out dx, ax }
> }
>
>
> For all these case Microsoft Visual C++ 2010 Express has the very same
> interpretation that Richard describes and conformant to the documentation.
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120814/f808f3dc/attachment.html>


More information about the cfe-commits mailing list