Il 13/08/2012 23:54, Eli Friedman ha scritto:
> On Mon, Aug 13, 2012 at 2:01 PM, Richard Smith <[email protected]> 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.


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to