/* { dg-do compile } */ /* { dg-options "-O3" } */ /* { dg-require-effective-target indirect_jumps } */ #include #include void * my_malloc (size_t size); typedef struct glk { struct glk *nxt; } glk; typedef struct Lock { glk ByteLock; } Lock; static Lock *l, *lk; void bytelocks(glk *rethead, jmp_buf jb) { glk *cur, *cur_lk; if (( setjmp (jb)) == 0) for (cur = &l->ByteLock; cur != ((glk *)0) ; cur = (cur)->nxt) for (cur_lk = &lk->ByteLock; cur_lk != ((glk *)0); cur_lk = cur_lk->nxt) { glk *retrng; if(!rethead) rethead = (glk *) my_malloc (sizeof(glk)); retrng = (glk *) my_malloc (sizeof(glk)); retrng->nxt = rethead; } return; }