1  /* { dg-do compile } */
       2  /* { dg-options "-O3" } */
       3  /* { dg-require-effective-target indirect_jumps } */
       4  
       5  #include <setjmp.h>
       6  #include <stdlib.h>
       7  
       8  void * my_malloc (size_t size);
       9  
      10  typedef struct glk {
      11    struct glk *nxt;
      12  } glk;
      13  
      14  typedef struct Lock
      15  {
      16   glk ByteLock;
      17  } Lock;
      18  
      19  static Lock *l, *lk;
      20  
      21  void bytelocks(glk *rethead, jmp_buf jb)
      22  {
      23    glk *cur, *cur_lk;
      24  
      25    if (( setjmp (jb)) == 0)
      26      for (cur = &l->ByteLock; cur != ((glk *)0) ; cur = (cur)->nxt)
      27          for (cur_lk = &lk->ByteLock; cur_lk != ((glk *)0); cur_lk = cur_lk->nxt)
      28            {
      29              glk *retrng;
      30  
      31              if(!rethead)
      32                rethead = (glk *) my_malloc (sizeof(glk));
      33              retrng = (glk *) my_malloc (sizeof(glk));
      34  
      35              retrng->nxt = rethead;
      36            }
      37  
      38   return;
      39  }