jmpbug.c 614 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* setjmp 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. static void
  8. sub5 (jmp_buf buf)
  9. {
  10. longjmp (buf, 1);
  11. }
  12. static void
  13. test (int x)
  14. {
  15. jmp_buf buf;
  16. char *foo;
  17. int arr[100];
  18. ++ret;
  19. arr[77] = x;
  20. if (setjmp (buf))
  21. {
  22. --ret;
  23. if (verbose)
  24. printf ("made it ok; %d\n", arr[77]);
  25. return;
  26. }
  27. foo = (char *) alloca (128);
  28. sub5 (buf);
  29. }
  30. int
  31. main (int argc, char *argv[])
  32. {
  33. int i;
  34. verbose = (argc != 1);
  35. ret = 0;
  36. for (i = 123; i < 345; ++i)
  37. test (i);
  38. return ret;
  39. }