https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109952

            Bug ID: 109952
           Summary: Inconsistent HIGH values with 'ARRAY OF CHAR'
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: modula2
          Assignee: gaius at gcc dot gnu.org
          Reporter: gaius at gcc dot gnu.org
  Target Milestone: ---

As reported on the gm2 mailing list the behaviour of HIGH is inconsistent.

MODULE port_test8_gm2;

FROM IOChan IMPORT
  ChanId;
FROM StdChans IMPORT
  StdOutChan;
FROM Strings IMPORT
  Length;
FROM TextIO IMPORT
  WriteLn, WriteString;
FROM WholeIO IMPORT
  WriteCard;


VAR
  str_a:                        ARRAY[0..0] OF CHAR;
  str_b:                        ARRAY[0..1] OF CHAR;
  str_c:                        ARRAY[0..2] OF CHAR;


PROCEDURE ShowStringInfos(the_str: ARRAY OF CHAR);
  VAR
    cid_out:                    ChanId;

  BEGIN                         (* PROCEDURE ShowStringInfos *)
    cid_out:=StdOutChan();

    WriteString(cid_out, 'Length(the_str): ');
    WriteCard(cid_out, Length(the_str), 1);
    WriteLn(cid_out);

    WriteString(cid_out, 'HIGH(the_str): ');
    WriteCard(cid_out, HIGH(the_str), 1);
    WriteLn(cid_out);

    WriteString(cid_out, 'the_str: ');
    WriteString(cid_out, the_str);
    WriteLn(cid_out);

    WriteLn(cid_out);
  END ShowStringInfos;


BEGIN                           (* MODULE port_test8_gm2 *)
  ShowStringInfos('1');
  ShowStringInfos('12');
  ShowStringInfos('123');

  str_a:='a';
  ShowStringInfos(str_a);
  str_b:='ab';
  ShowStringInfos(str_b);
  str_c:='abc';
  ShowStringInfos(str_c);

  str_c:='d';
  ShowStringInfos(str_c);
END port_test8_gm2.

ShowStringInfos just prints out the Length, the HIGH value and the
string proper which is passed to the PROCEDURE. When using literals
'1', '12' and '123' the HIGH values are 0, 2 and 3.

Reply via email to