Zero-length types (was: Record

Frank Heckenbach frank at g-n-u.de
Sat Mar 23 01:24:48 CET 2002


Emil Jerabek wrote:

> Sorry, should think twice before submitting a bugreport. The story with
> "file of record end" is more complicated then I wrote.
> 
> The test below should pass for any type (which is permissible as
> a file component-type, of course). It indeed works with, say, 
> "file of Integer", but with the empty record type it fails:
> 
> 
> [pas]% gpc -v
> Reading specs from /usr/local/lib/gcc-lib/i586-pc-linux-gnu/2.95.2/specs
> gpc version 20020318, based on 2.95.2 19991024 (release)
> [pas]% gpc recordend3.pas
> [pas]% ./a.out
> failed 1: (end) ... EOF = False
> zsh: floating point exception (core dumped)  ./a.out
> 
> 
> Apparently, the RTS doesn't track the length and current position of
> file variables, and tries to compute them from the byte-size of the file
> when needed. This is wrong for "file of record end" and similar beasts,
> because
> 
> (i) it makes EOF always return False (in Inspection mode, at least)
> 
> (ii) most direct access functions raise a "division by zero" signal

That's true. Since you agreed that this is "completely pointless" in
practice, and it's not trivial to fix, I'll assign it a rather low
priority (emil16.pas).

However, maybe it would make the code somewhat cleaner in general to
track the current position, so I'll think about it.

Though one question remains: What *should* the size of a file of
emptyrec actually be? If the external file is empty, it's undefined
(0/0), otherwise it's infinite (n/0, n>0). Has the standard got
anything to say about it? Otherwise, what would be most reasonable?
Perhaps MaxInt?

(All other Pascal compilers I have handy, i.e. BP and an older
version of FPC, choke on it as well, so there doesn't seem to be any
precedence.)

Frank

-- 
Frank Heckenbach, frank at g-n-u.de, http://fjf.gnu.de/, 7977168E
GPC To-Do list, latest features, fixed bugs:
http://agnes.dida.physik.uni-essen.de/~gnu-pascal/todo.html




More information about the Gpc mailing list