Errors and Standards (was: compiler bug)
da Silva, Joe
Joe.daSilva at emailmetering.com
Mon Oct 22 07:43:00 CEST 2001
Oops! Forgot to fiddle the send address, yet again! :-(
Please see below ...
> -----Original Message-----
> From: Frank Heckenbach [SMTP:frank at g-n-u.de]
> Sent: Saturday, October 20, 2001 7:57 AM
> To: gpc at gnu.de
> Subject: Re: Errors and Standards (was: compiler bug)
> J. David Bryan wrote:
> > On 19 Oct 2001, at 1:33, Frank Heckenbach wrote:
> > > So, the following program would be allowed to output 0, according to
> > > standard (because i might be mapped to an I/O address that happens to
> > > always yield 0)? I strongly doubt it?
> > Well, you've caught me without my copy of the standard at hand :-), but
> > I recall, there is a requirement that operations on integers must follow
> > the rules of integer math. I can't check whether assignment is one of
> > those operations listed, but it seems reasonable. So, no, the program
> > cited wouldn't be a conforming program (pending confirmation from the
> > standard).
> I hope so.
> > But how could the compiler possibly enforce this? Binding to RAM vs. a
> > mapped I/O port (or to ROM) would be done at link time, so must the
> > compiler issue a warning for the "var" statement that variables must be
> > bound to RAM? How else can we disallow such a program?
> I think a "processor" according to the standard includes the
> compiler as well as the linker. Whether in practice a compiler alone
[Joe da Silva]
Yes, in the case of GPC, the "processor" must mean the
compiler _and_ linker (it doesn't make sense to talk about
just half a "processor" ;-).
On the topic of "binding" variables, my understanding is
that any variables declared in the "var" block of a program
are local to the program and exist only during the execution
of the program, unless they are included in the program's
parameter list - just like file variables!
Suppose there is an implementation-dependent system
variable called "user", that contains a string (with the
user's name). Now, if the "processor" has a predefined
binding for this variable, a program could reference it,
_without_ defining it in the "var" block. However, if "user"
were defined in the program's "var" block, then this would
be a _local_ variable called "user", not the predefined
system variable (assuming of course it isn't also included
in the program's parameter list)!
So, in your previous example, where you defined a variable
called "i" and assigned it the value 42, this variable could
not have any other binding - it is simply a normal variable
and must behave as such!
> (such as GPC) that might be used in conjunction with various linkers
> could be 100% conforming, is another question (and the answer is
> probably no, without making some requirements on the linker and
> forbidding the user of linker scripts etc.).
> > > Yes, but some things (like that the program above should write 42,
> > > possibly preceded by a number of spaces) are guaranteed, I think.
> > Unfortunately, what you and I think has no bearing on the matter. Only
> > what the standard "thinks" is important! ;-) Cite a passage from the
> > standard that states that main program block-level variables may not be
> > bound to external entities, and I will concede your point happily.
> I'm just packing my bags and will be gone for the weekend, but I'll
> look when I'm back ...
> Frank Heckenbach, frank at g-n-u.de, http://fjf.gnu.de/
> GPC To-Do list, latest features, fixed bugs:
More information about the Gpc