#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %begin

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     2    %switch test1, test2 ( -1 : 1 )

  int TEST1_index;
  int TEST1_line;
  char *TEST1_file;
  static const void *TEST1[3] = {&&case_TEST1_missing, &&case_TEST1_0, &&case_TEST1_missing};

  int TEST2_index;
  int TEST2_line;
  char *TEST2_file;
  static const void *TEST2[3] = {&&case_TEST2_M1, &&case_TEST2_default, &&case_TEST2_1};

  //     3    %integer i = 0

  int I;
  I = 0;

  //     4    test1(0):

case_TEST1_0:;

//     5    ->test2(i)

  TEST2_line = __LINE__;
  TEST2_file = __FILE__;
  TEST2_index = I;
  goto case_TEST2_dispatch;

  //     6    test2(*):

case_TEST2_default:;

//     7    test2(1):

case_TEST2_1:;

//     8    test2(-1):

case_TEST2_M1:;

//     9  %endofprogram

  _imp_stop(0);
  return 0;

case_TEST1_dispatch:
  if (TEST1_index < -1 || TEST1_index > 1)
    _imp_signalf(6, 3, TEST1_index, "->TEST1(%d) out of bounds at %s line %d", TEST1_index, TEST1_file, TEST1_line);
  goto *TEST1[TEST1_index - -1];

case_TEST1_missing:
  _imp_signalf(8, 2, TEST1_index, "switch jump to undefined label TEST1(%d): at %s line %d", TEST1_index, TEST1_file,
               TEST1_line);

case_TEST2_dispatch:
  if (TEST2_index < -1 || TEST2_index > 1)
    _imp_signalf(6, 3, TEST2_index, "->TEST2(%d) out of bounds at %s line %d", TEST2_index, TEST2_file, TEST2_line);
  goto *TEST2[TEST2_index - -1];
end_0:;
}