(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
setjmp-pr109094.c
       1  /* Reduced from an ICE seen in qemu's target/i386/tcg/translate.c  */
       2  
       3  typedef long int __jmp_buf[8];
       4  struct __jmp_buf_tag {
       5    __jmp_buf __jmpbuf;
       6  };
       7  typedef struct __jmp_buf_tag sigjmp_buf[1];
       8  
       9  extern int __sigsetjmp(sigjmp_buf env, int savesigs);
      10  extern void siglongjmp(sigjmp_buf env, int val);
      11  
      12  typedef struct DisasContextBase {
      13    int num_insns;
      14  } DisasContextBase;
      15  
      16  typedef struct DisasContext {
      17    DisasContextBase base;
      18    sigjmp_buf jmpbuf;
      19  } DisasContext;
      20  
      21  extern int translator_ldub(DisasContextBase *base, int);
      22  
      23  int advance_pc(DisasContext *s, int num_bytes) {
      24    if (s->base.num_insns > 1) {
      25      siglongjmp(s->jmpbuf, 2);
      26    }
      27    return 0;
      28  }
      29  
      30  static inline int x86_ldub_code(DisasContext *s) {
      31    return translator_ldub(&s->base, advance_pc(s, 1));
      32  }
      33  
      34  static void disas_insn(DisasContext *s) {
      35    int b;
      36    __sigsetjmp(s->jmpbuf, 0);
      37    b = x86_ldub_code(s);
      38  }