#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_enter();
  const int STRLEN = 3;
  const _imp_string CHECK[3 - 1 + 1] = {_imp_str_literal("ABC"),
                                        _imp_str_literal("DEF"),
                                        _imp_str_literal("GHI")};
  int I;
  int FAIL;
  _imp_string SF[3 - 1 + 1];
  _imp_string *SAN;

  typedef struct F {
    ARRAYNAME_imp_string *SN;
    _imp_string S[3 - 1 + 1];
    int I;
    int J;

  } F;
  F *R;
  static char A[35 - 0 + 1] = {0,    0,    0,    1,    0,    0,    0,
                               2,    0x03, 0x41, 0x42, 0x43, 0x03, 0x44,
                               0x45, 0x46, 0x03, 0x47, 0x48, 0x49, 0};
  auto void CHECKVALUE(int I, _imp_string S) {
    _imp_enter();
    if (S != CHECK[I]) {
      PRINTSTRING(_imp_str_literal("\nBUG IN STRING VALUE"));
    }
    _imp_leave();
  }
  auto void CHECKNAME(int I, _imp_string *S) {
    _imp_enter();
    if (S != CHECK[I]) {
      PRINTSTRING(_imp_str_literal("\nBUG IN STRING NAMES"));
    }
    _imp_leave();
  }
  FAIL = 0;
  R = RECORD(ADDR(A[0])); /*ERROR: name_sym_idx is -1!*/ /*C_NAME*/
  SAN = &;
  R->SN = &R->S;
  CHECKVALUE(1, R->S[1]);
  CHECKNAME(1, R->S[1]);
  CHECKVALUE(1, R->SN);
  CHECKNAME(1, R->SN);
  CHECKVALUE(1, SAN);
  CHECKNAME(1, SAN);
  for (I = 1; I != 3 + 1; I += 1) {
    CHECKVALUE(I, R->S[I]);
    CHECKNAME(I, R->S[I]);
    CHECKVALUE(I, R->SN);
    CHECKNAME(I, R->SN);
    CHECKVALUE(I, SAN);
    CHECKNAME(I, SAN);
  }
  if (FAIL == 0) PRINTSTRING(_imp_str_literal("Test OK"));
  _imp_leave();
  exit(0);
  return (0);
}
