[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