I have these two instructions, first one inside some procedure, second one is an outside declaration.
Code verification passes and it runs, but incorrectly.
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.
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.
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!