[LLVMdev] Should the function operand flag 'sret' match the flag in function declaration?
Dan Gohman
gohman at apple.com
Mon May 10 11:42:14 PDT 2010
On May 8, 2010, at 10:31 AM, Chris Lattner wrote:
>
> On May 7, 2010, at 6:24 PM, Yuri wrote:
>
>> I have these two instructions, first one inside some procedure, second
>> one is an outside declaration.
>> Code verification passes and it runs, but incorrectly.
>
> Right, this code has undefined behavior.
>
>> Every time I saw such situation coming from c++ compiler, attributes
>> 'noalias sret' appear on both call and declaration.
>>
>> Does such situation make sense, or (as I guess it is) a bug in verifier?
>> I think verifier should match at least 'sret' flag in call and declaration.
>>
>> ...
>> call void @_Z7returnsi(%struct.MyString* %z, i32 %1) nounwind
>> ...
>> declare void @_Z7returnsi(%struct.MyString* noalias sret, i32)
>> ...
>
> The verifier flags and rejects *invalid* IR, not IR with undefined behavior. Dan has been working on a pass (in lib/Analysis/Lint.cpp) that should catch this sort of thing. If it doesn't already, please send in a patch to make it catch it. Thanks!
The lint pass currently just does this:
// TODO: Check sret attribute.
So yes, please send a patch :-).
Thanks,
Dan
More information about the llvm-dev
mailing list