On Dec 10, 2009, at 5:42 PM, Mike Stump wrote:
> On Dec 10, 2009, at 4:08 PM, Chris Lattner wrote:
>> On Dec 10, 2009, at 2:57 PM, Mike Stump wrote:
>>
>>> Author: mrs
>>> Date: Thu Dec 10 16:57:48 2009
>>> New Revision: 91073
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=91073&view=rev
>>> Log:
>>> Don't complain about falling off the end of a function with an asm
>>> block, if the function is supposed to return a value as we don't know
>>> exactly what the asm code does.
>>
>> Why?
>
> Because people write code like:
>
> void* t4(void) { __asm mov eax, fs:[0x10] }
That is not gnu asm syntax. Also, you're not fixing the right thing here.
Several issues:
1. Setting eax is guaranteed to set the return value, the compiler could
clobber it after the asm.
2. The bigger issue is that you're *changing the CFG* to avoid a *data* issue.
In either case, your code is not right.
>> A fix to silence the warning is to use __builtin_unreachable() after the asm.
>
> But that point is reachable.
Then why are you changing the CFG?
>
> Also, int foo() { asm("a: jump a"); } doesn't fall off the end. Essentially,
> trying to understand what is inside the asm is a dangerous thing.
You're right, which is why we should follow gcc's policy of assuming it can
fall through!
-Chris
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits