40 lines
769 B
C
40 lines
769 B
C
/* { dg-do compile } */
|
|
/* { dg-options "-O3" } */
|
|
/* { dg-require-effective-target indirect_jumps } */
|
|
|
|
#include <setjmp.h>
|
|
#include <stdlib.h>
|
|
|
|
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;
|
|
}
|