#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 printarrayname3(%integerarray(3)%name A)

  void PRINTARRAYNAME3(int *A) {
    //     4  %end

    return;
  } /* end of PRINTARRAYNAME3 */

  // ?A unused
  //     5
  //     6  %integerarray RA3(0:1, 0:1, 0:1)

  int RA3[2][2][2];
  struct _imp_dv RA3_dv = {RA3, sizeof(int) /*, dims, <bounds> */};

  //     7
  //     8  printarrayname3(RA3)

  PRINTARRAYNAME3(RA3);

  //     9
  //    10  %integerarray(3)%name RAN3

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

  //    11
  //    12  RAN3 == RA3

  RAN3 = (int *)RA3;

  //    13
  //    14  printarrayname3(RAN3)

  PRINTARRAYNAME3(RAN3);

  //    15
  //    16  %endofprogram

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