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

Nuno Lopes nunoplopes at sapo.pt
Thu Nov 29 14:21:00 PST 2012


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

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 




More information about the llvm-dev mailing list