home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / c / rconfig.lha / RConfig_v1.1 / tests / 6 / test6.c < prev   
C/C++ Source or Header  |  1992-09-20  |  953b  |  55 lines

  1. /*
  2.  * RConfig Validation Suite by Anthon Pang, Omni Communications Products
  3.  *
  4.  * Object Code: alloca & setjmp interdependence test
  5.  * Assigned Test # 6
  6.  * Requirements: alloca.h, rsetjmp.h
  7.  * Desired Observation(s):
  8.  *   Multiple alloca()'s; longjmp() should restore state, automatically
  9.  *   free'ing alloca'd blocks
  10.  */
  11.  
  12. #include <stdio.h>
  13.  
  14. #include "rlib.h"
  15.  
  16. jmp_buf myenv;
  17.  
  18. void proc2(int dummy)
  19. {
  20.     char *t;
  21.  
  22.     t = (char*)alloca(128);
  23.     printf("%08lx\n", t);
  24.     longjmp(myenv, 1);
  25.  
  26.     /* not reached */
  27.     free(t); /* at least, it shouldn't be! */
  28. }
  29.  
  30. void proc1(int dummy)
  31. {
  32.     char *y,*z;
  33.  
  34.     y = (char*)alloca(128);
  35.     z = (char*)alloca(128);
  36.     printf("%08lx %08lx ", y, z);
  37.     proc2(1);
  38. }
  39.  
  40. void main() {
  41.     char x[2048];
  42.     extern long _last_alloca_blk;
  43.  
  44.     x[0] = 'X';
  45.  
  46.     if (setjmp(myenv))
  47.         puts("Done.\n");
  48.     else {
  49.         printf("Starting...%08lx\n", _last_alloca_blk);
  50.         proc1(0);
  51.     }
  52.  
  53.     exit(0);
  54. }
  55.