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

Kostya Serebryany kcc at google.com
Wed Nov 28 05:47:16 PST 2012


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/20121128/c1573c88/attachment.html>


More information about the llvm-dev mailing list