[LLVMdev] noreturn attribute on a call instruction vs noreturn on afunction

Kostya Serebryany kcc at google.com
Fri Nov 30 03:13:17 PST 2012


On Fri, Nov 30, 2012 at 2:21 AM, Nuno Lopes <nunoplopes at sapo.pt> wrote:

> You can use CallInst::hasFnAttr().  It checks for attributes in the
> instruction and in the function decl.
>

Indeed....
And we have
    bool doesNotReturn() const { return hasFnAttr(Attributes::NoReturn); }
and asan code called CI->doesNotReturn  and it did not work, but now it
works.
Hmm.
Anyway, thanks!

--kcc


>
> http://llvm.org/docs/doxygen/**html/Instructions_8cpp_source.**html#l00345<http://llvm.org/docs/doxygen/html/Instructions_8cpp_source.html#l00345>
>
> Nuno
>
>
> ----- Original Message -----
>
>> Hi,
>>
>> Building the following C code I get a call instruction that has no
>> noreturn
>> attribute, while the function itself does have it.
>>
>> void foo(void **b) {
>>  __builtin_longjmp(b, 1);
>> }
>>
>>
>> define void @_Z3fooPPv(i8** %b) noreturn nounwind uwtable {
>> entry:
>>  %0 = bitcast i8** %b to i8*
>>  tail call void @llvm.eh.sjlj.longjmp(i8* %0)
>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<**<<<<<<
>>  unreachable
>> }
>>
>> declare void @llvm.eh.sjlj.longjmp(i8*) noreturn nounwind
>> <<<<<<<<<<<<<<<<<
>>
>>
>> I've hit this in asan where it checks the noreturn attribute in the call
>> instruction, but not in the function object.
>> Who is wrong here? Should asan also check noreturn in the called function?
>>
>> Thanks,
>>
>> --kcc
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121130/5d7cf682/attachment.html>


More information about the llvm-dev mailing list