I declared gi2 as "volatile" and I think gi2 is still incremented once. <br>
Here is a snippet of the code. Line 39 - 42 increments gi2.<br>
<br>According to the standard, shouldn't ++gi2 be executed twice regardless of whether gi2 is volatile or not? Isn't the missing chain from EH_SJLJ_SETJMP node to load/store nodes that access gi2 causing this problem (please see attached file in my previous email)? <br>
<br># line 39 - 47<br> ldr r1, LCPI1_1<br>
 ldr r2, [r1]<br>
 add r2, r2, #1<br>
 str r2, [r1]<br>
 add r4, pc, #8              @ eh_setjmp begin<br>
 str r4, [r0, #4]<br>
 mov r0, #0<br>
 add pc, pc, #0<br>
 mov r0, #1                  @ eh_setjmp end<br>
<br>
 ...<br>
LCPI1_1:<br>
  .long _gi2<br>
  .align  2<br>
<br>
<br><div class="gmail_quote">On Wed, Apr 27, 2011 at 11:38 AM, Akira Hatanaka <span dir="ltr"><<a href="mailto:ahatanak@gmail.com">ahatanak@gmail.com</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;">
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<div class="im"><br><br>#include <stdio.h><br>#include <stdlib.h><br>
</div>
void *buf[20];<br>
<br>int gi2 = 0;<div class="im"><br><br>void __attribute__ ((noinline)) sub2 (void)<br>{<br></div>  __builtin_longjmp (buf, 1);<div class="im"><br>}<br><br>int<br>main (int argc, char **argv)<br>{<br></div>  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"><div class="im">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>


</div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im"><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></div><font color="#888888"><br>
/jakob<br>
<br>
</font></blockquote></div><br>
</blockquote></div><br>