I have another basic question about setjmp/longjmp.<br><br>When I compile and run the following program, is it expected that global variable gi2 will be incremented twice? It seems that the code generated with clang and llc increments it only once (line 37-43 of attached file). <br>

<br>$ clang setjmp6.c -o setjmp6.arm.ll -emit-llvm -O3 -S -ccc-host-triple arm-unknown-darwin -ccc-clang-archs arm<br>$ llc setjmp6.arm.ll -o setjmp6.arm.s<br><br>#include <stdio.h><br>#include <stdlib.h><br>
void *buf[20];<br>
<br>int gi2 = 0;<br><br>void __attribute__ ((noinline)) sub2 (void)<br>{<br>  __builtin_longjmp (buf, 1);<br>}<br><br>int<br>main (int argc, char **argv)<br>{<br>  int n = atoi (argv[1]);<br>  int r = __builtin_setjmp (buf);<br>

  ++gi2;<br><br>  if (r)<br>    {<br>      printf ("setjmp %d\n", n + gi2);<br>      return 0;<br>    }<br><br>  sub2 ();<br><br>  return 0;<br>}<br><br><br><div class="gmail_quote">On Wed, Apr 13, 2011 at 10:05 AM, Jakob Stoklund Olesen <span dir="ltr"><<a href="mailto:stoklund@2pi.dk" target="_blank">stoklund@2pi.dk</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><br>
On Apr 13, 2011, at 9:51 AM, Akira Hatanaka wrote:<br>
<br>
> int<br>
> main (int argc, char** argv)<br>
> {<br>
>   int n = atoi(argv[1]), r;<br>
><br>
>   if ((r = setjmp (buf)))<br>
>     {<br>
>       printf("n = %d\n", n);<br>
>       return 0;<br>
>     }<br>
<br>
</div><font color="#888888"><br>
/jakob<br>
<br>
</font></blockquote></div><br>