#include <perms.h>

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

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

  //     2
  //     3  %ROUTINE MAKE MOVE(%INTEGERARRAYNAME COMP)

  void MAKEMOVE(int *COMP) {
    //     4
    //     5  ! generates COMP[26] = (((int *)(COMP[26])) + (1));
    //     6
    //     7  COMP(26) = COMP(26)+1;        ! increase crown count

    COMP[/*BUG*/ 26] = COMP[/*BUG*/ 26] + 1;

    //     8  %END

    return;
  } /* end of MAKEMOVE */

  //     9
  //    10  %integerarray comp(-1:30)

  int COMP[32];
  struct _imp_dv COMP_dv = {COMP, sizeof(int) /*, dims, <bounds> */};

  //    11
  //    12  make move(comp)

  MAKEMOVE(COMP);

  //    13
  //    14  %integerarrayname ian

  int *IAN;
  struct _imp_dv IAN_dv = {0};  // assignment of an array to an arrayname must copy bounds info too...

  //    15
  //    16  ian == comp

  IAN = (int *)COMP;

  //    17
  //    18  ian(26) = ian(26) + 1

  IAN[/*BUG*/ 26] = IAN[/*BUG*/ 26] + 1;

  //    19
  //    20  make move(ian)

  MAKEMOVE(IAN);

  //    21
  //    22  %endofprogram

  _imp_stop(0);
  return 0;
end_0:;
}