[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