#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %constrecord(*)%name  null == (0)

const struct I *NULL = 0;

//     2  %begin

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

  //     3    %recordformat fm1(%integer i)

  struct FM1 {
    union {
      struct {
        int I;
      };
    };
  };

  //     4    %recordformat fm2(%real i)

  struct FM2 {
    union {
      struct {
        float I;
      };
    };
  };

  //     5    %record (fm1) r1

  struct FM1 R1;

  //     6    %record (fm2) r2

  struct FM2 R2;

  //     7    %record (fm1) %name rp1

  struct FM1 *RP1;

  //     8    %record (fm2) %name rp2

  struct FM2 *RP2;

  //     9    rp1 == r1

  RP1 = (struct FM1 *)/*?*/ &R1;

  //    10    rp2 == r2

  RP2 = (struct FM2 *)/*?*/ &R2;

  //    11    %stop %if rp1 == null

  if (_imp_ADDR((void *)(RP1)) != _imp_ADDR((void *)(NULL))) goto L_0001;

  _imp_stop(0);
L_0001:;

//    12    %stop %if rp2 == null

  if (_imp_ADDR((void *)(RP2)) != _imp_ADDR((void *)(NULL))) goto L_0002;

  _imp_stop(0);
L_0002:;

//    13  %endofprogram

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