sigjmpbug.c 660 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* sigsetjmp vs alloca test case. Exercised bug on sparc. */
  2. #include <stdio.h>
  3. #include <setjmp.h>
  4. #include <alloca.h>
  5. int ret;
  6. int verbose;
  7. __attribute__ ((__noreturn__))
  8. static void
  9. sub5 (jmp_buf buf)
  10. {
  11. siglongjmp (buf, 1);
  12. }
  13. static void
  14. test (int x)
  15. {
  16. sigjmp_buf buf;
  17. char *foo;
  18. int arr[100];
  19. ++ret;
  20. arr[77] = x;
  21. if (sigsetjmp (buf, 1))
  22. {
  23. --ret;
  24. if (verbose)
  25. printf ("made it ok; %d\n", arr[77]);
  26. return;
  27. }
  28. foo = (char *) alloca (128);
  29. sub5 (buf);
  30. }
  31. int
  32. main (int argc, char *argv[])
  33. {
  34. int i;
  35. verbose = (argc != 1);
  36. ret = 0;
  37. for (i = 123; i < 345; ++i)
  38. test (i);
  39. return ret;
  40. }