diff options
| -rw-r--r-- | test/setjmp/sigjmpbug.c | 50 | 
1 files changed, 50 insertions, 0 deletions
diff --git a/test/setjmp/sigjmpbug.c b/test/setjmp/sigjmpbug.c new file mode 100644 index 000000000..8c3be1cee --- /dev/null +++ b/test/setjmp/sigjmpbug.c @@ -0,0 +1,50 @@ +/* sigsetjmp vs alloca test case.  Exercised bug on sparc.  */ + +#include <stdio.h> +#include <setjmp.h> +#include <alloca.h> + +int ret; +int verbose; + +static void +sub5 (jmp_buf buf) +{ +  siglongjmp (buf, 1); +} + +static void +test (int x) +{ +  sigjmp_buf buf; +  char *foo; +  int arr[100]; + +  ++ret; + +  arr[77] = x; +  if (sigsetjmp (buf, 1)) +    { +      --ret; +      if (verbose) +        printf ("made it ok; %d\n", arr[77]); +      return; +    } + +  foo = (char *) alloca (128); +  sub5 (buf); +} + +int +main (int argc, char *argv[]) +{ +  int i; + +  verbose = (argc != 1); +  ret = 0; + +  for (i = 123; i < 345; ++i) +    test (i); + +  return ret; +}  | 
