[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