[LLVMdev] llvm-gcc4 and setjmp

Jay Foad jay.foad at antixlabs.com
Fri Aug 24 01:59:44 PDT 2007


Hi,

I'm using LLVM 2.0 on cygwin and x86_64-linux-gnu. If I compile a simple
program using setjmp:

#include <setjmp.h>
extern jmp_buf j;
extern void g(void);
int f(void)
{
  volatile int v = 0;
  if (setjmp(j))
    return v;
  v = 1;
  g();
  return 0;
}

the resulting bitcode doesn't use LLVM's exception handling intrinsics, it
just has a call to a function called "_setjmp". And there doesn't seem to be
any provision for returning the current value of the volatile variable v if
setjmp returns non-zero - the bitcode always returns zero, whereas the spec
for setjmp() says that f() should return 1 if g() does a longjmp().

If I change my program to call __builtin_setjmp() explicitly, instead of
setjmp(), the resulting bitcode has optimised the call away as if it always
returned zero.

So is setjmp supported at all with llvm-gcc4? I couldn't see anything in the
release notes saying that it isn't.

Thanks,
Jay.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070824/533d612c/attachment.html>


More information about the llvm-dev mailing list