ISO 7185 test failures

Scott Moore samiam at moorecad.com
Thu Nov 22 20:07:42 CET 2007


{******************************************************************************

GPC standard ISO 7185 test failures

The following failures were found:

===============================================================================
C:\GPC\usr\test>gpc --standard-pascal -Wno-warnings -o fails fails.pas
fails.pas:93: error: ISO 7185 Pascal allows only simple constants
fails.pas: In main program:
fails.pas:112: error: this use of packed array components is an extension of
fails.pas:112: error:  Borland Pascal, traditional Macintosh Pascal
fails.pas:113: error: this use of packed record fields is an extension 
of Borland
fails.pas:113: error:  Pascal, traditional Macintosh Pascal
===============================================================================

None of these are valid failures, or indeed even have a reasonable 
explaination
in the standard. Also, all of these used to work fine in GPC:

GNU Pascal version 2.1 (20020510), based on gcc-2.95.3-6 (mingw special)

See the testing details for that compiler:

http://www.moorecad.com/standardpascal/compiler.html

Now, with "--standard-pascal" off:

===============================================================================
C:\GPC\usr\test>gpc -Wno-warnings -o fails fails.pas

C:\GPC\usr\test>fails
1
10
100
2147483647
True
False
===============================================================================

This appears to indicate the default fields for integer is set to 1. This is
technically valid, but clearly preverts the intent of the language. The
"Pascal users manual and report" shows several examples of the field for
integer being clearly set to the maximum size of integer. Ie., for a maximum
integer of 11 digits including the sign (for +/-2147483647) the default 
should
be 11 digits for integer. The output of numbers in collumns under the
assumption that they would correctly spaced for all integers would fail 
under
the current GPC (see again the several examples in the "report"). I have had
the discussion with another implementor, and this treatment of defaults 
falls
under "techically valid (by the ISO 7185 standard), but would break examples
of the original Pascal as formulated by Wirth", which I consider a quality
issue.

There is no explaination for the values of boolean. Since they are 
treated as
the strings "true" or "false", there is no possible default field that would
deliver the results shown. If the default were 5 (size of 'false') the 
result
would be:

  True
False

For 4 (size of 'true') it would be:

True
Fals

I tried this also with the "--standard-pascal" flag on (by commenting 
out the
error causing statements), and got the same result.

Again, this used to pass:

GNU Pascal version 2.1 (20020510), based on gcc-2.95.3-6 (mingw special)

Here is a -v dump on the GPC used:

===============================================================================
C:\GPC\usr\test>gpc -v
Reading specs from /ecos-c/gpc/usr/bin/../lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: ../configure --verbose --prefix=/usr --exec-prefix=/usr 
--sysco
nfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib 
--mandir=/usr/share/man --inf
odir=/usr/share/info --enable-languages=c,pascal --enable-nls 
--without-included
-gettext --enable-version-specific-runtime-libs --without-x 
--enable-libgcj --di
sable-java-awt --with-system-zlib --enable-interpreter 
--disable-libgcj-debug --
enable-threads=posix --enable-java-gc=boehm --disable-win32-registry 
--enable-sj
lj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: posix
gpc version 20051116, based on gcc-3.4.4
===============================================================================

******************************************************************************}

program fails(output);

const scst = 'this is a string';

type cset  = set of char;
      prec = packed record

               i:   integer;
               b:   boolean;
               c:   char;
               r:   real;
               stc: cset;

            end;

var i: integer;
     pavs:  packed array [1..10] of cset;
     parec: prec;

begin

    for i := 1 to 10 do pavs[i] := [chr(i+ord('a'))];
    parec.stc := ['b'..'e', 'i'];
    writeln(1);
    writeln(10);
    writeln(100);
    writeln(maxint);
    writeln(true);
    writeln(false)

end.





More information about the Gpc mailing list