<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
<font face="Times New Roman" size="+1"><br>
The suggestion was correct.&nbsp;&nbsp; If I change the range to:<br>
</font>
<blockquote><font face="Times New Roman" size="+1">type arange = -1..5;
  </font><br>
  <font face="Times New Roman" size="+1">...</font><br>
  <font face="Times New Roman" size="+1">b := max(a-1,-1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*
keep b in range */
  </font><br>
</blockquote>
<font face="Times New Roman" size="+1">The 64-bit code works properly.&nbsp;
So it does seem 0..5 is treated as signed and that causes the problem.<br>
<br>
The fix is then pretty simple:<br>
</font>
<blockquote><font face="Times New Roman" size="+1">max(a-1,0)&nbsp; =&gt;
a-min(1,a);</font><br>
</blockquote>
<font face="Times New Roman" size="+1">which appears to avoid the
problem.<br>
<br>
<br>
Chris Ferrall wrote:</font>
<blockquote cite="mid:461AB884.1010609@queensu.ca" type="cite"><font
 face="Times New Roman" size="+1"><br>
The following program behaves differently under 32-bit and 64-bit
  <br>
compilation.&nbsp; In 64-bit the "max()" function returns a large integer
  <br>
when a value is sent out of bounds (output not shown).&nbsp; The point of
the
  <br>
max() is to keep a value from going out of bounds.&nbsp; This problem does
  <br>
not occur in 32-bit code.&nbsp; To make sure that range checking was on in
  <br>
both cases I set "a" out of range after the max().
  <br>
  <br>
Is this a feature of the cpu option? And/or is there a more robust way
  <br>
of keeping within range?
  <br>
  <br>
Thanks for any help.
  <br>
  <br>
  <br>
P.S.&nbsp; I've already received the following response from Frank.
  <br>
  </font>
  <blockquote type="cite"><font face="Times New Roman" size="+1">I'm
not using a 64 bit machine myself, so I can only speculate. I
    <br>
hope Waldek can say more about it.
    <br>
    <br>
I think the problem might be that GPC treats "arange" internally as
    <br>
an unsigned type (i.e., as a subrange of "Cardinal", not "Integer")
    <br>
and on the 64 bit machine performs the "a - 1" unsigned which causes
    <br>
the range error. (On the 32 bit machine it can do it in LongestInt
    <br>
which covers the range of "Cardinal" as well as negative values, but
    <br>
on 64 bit, it currently doesn't support larger integer types. This
    <br>
might explain the different behaviour.)
    <br>
    <br>
Of course, this is a GPC bug as, according to ISO, your program is
    <br>
perfectly valid (given a suitable definition of "Max" which isn't
    <br>
part of ISO).
    <br>
    <br>
So the bugfix might be to make subrange types signed when the range
    <br>
allows (which would always be the case in valid ISO programs).
    <br>
    <br>
Frank
    <br>
    </font>
  </blockquote>
  <font face="Times New Roman" size="+1"><br>
  <br>
--------------------
  <br>
program test(input,output);
  <br>
  <br>
type arange = 0..5;
  <br>
  <br>
var a,b : arange;
  <br>
  <br>
begin
  <br>
&nbsp;&nbsp; a:= 0;
  <br>
&nbsp;&nbsp; b := max(a-1,0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* keep b in range */
  <br>
&nbsp; writeln('here ',b,' now really go out of range ');
  <br>
&nbsp; a := b-1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* take a out of range to make sure
  <br>
range checking is on */
  <br>
&nbsp; writeln('there ',a);
  <br>
end.
  <br>
  <br>
--------------------
  <br>
  <br>
Output
  <br>
  <br>
32-bit:
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; here 0 now really go out of range
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.out: value out of range (error #300 at 180e3)
  <br>
  <br>
64-bit
  <br>
&nbsp;&nbsp; a.out: value out of range (error #300 at 100009d2b)
  <br>
  <br>
32-bit compilation
  <br>
&nbsp;&nbsp; gpc maxtest.pas
  <br>
  <br>
64-bit
  <br>
&nbsp;&nbsp; gpc $g64pth $m64opt maxtest.pas
  <br>
  <br>
where $m64opt= "-mcpu=ultrasparc3 -m64"
  <br>
  <br>
---------------------
  <br>
Here is the version output
  <br>
  <br>
hpc1014@sfnode0$ gpc -v
  <br>
Reading specs from
  <br>
/opt/gpc/20051104/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs
  <br>
Configured with: ../gcc-3.4.3/configure --prefix=/opt/gpc/20051104
  <br>
--enable-languages=pascal
  <br>
Thread model: posix
  <br>
gpc version 20051104, based on gcc-3.4.3
  <br>
  <br>
  <br>
  <br>
-- Chris
  <br>
Christopher Ferrall <a class="moz-txt-link-rfc2396E" href="http://econ.queensu.ca/%7Eferrall/">&lt;http://econ.queensu.ca/%7Eferrall/&gt;</a>
  <br>
Associate Professor of Economics
  <br>
Department of Economics <a class="moz-txt-link-rfc2396E" href="http://www.econ.queensu.ca">&lt;http://www.econ.queensu.ca&gt;</a>
  <br>
Queen's University <a class="moz-txt-link-rfc2396E" href="http://www.queensu.ca">&lt;http://www.queensu.ca&gt;</a>
  <br>
Kingston, Ontario
  <br>
CANADA K7L 3N6&nbsp;&nbsp;&nbsp;&nbsp; ferrallc AT post.queensu.ca
  <br>
Mackintosh-Corry Rm A519
  <br>
ph: 613-533-6658
  <br>
fx: 613-533-6668
  <br>
  <br>
  </font>
</blockquote>
<font face="Times New Roman" size="+1"><br>
</font>
<div class="moz-signature"><font face="Times New Roman" size="+1">-- <br>
</font>
<table border="3" bordercolor="blue" cellpadding="5" cellspacing="3"
 rules="none">
  <tbody>
    <tr>
      <th style="font-weight: bold; color: rgb(79, 87, 244);"
 colspan="2"><font face="Times New Roman" size="+1"><a
 href="http://econ.queensu.ca/%7Eferrall/"
 style="text-decoration: none; color: rgb(79, 87, 244);">Christopher
Ferrall</a><br>
Associate Professor of Economics</font></th>
    </tr>
    <tr>
      <td style="color: rgb(79, 87, 244);"><font face="Times New Roman"
 size="+1"><a href="http://www.econ.queensu.ca"
 style="text-decoration: none; font-weight: bold; color: rgb(79, 87, 244);">Department
of Economics</a><br>
      <a href="http://www.queensu.ca"
 style="text-decoration: none; font-weight: bold; color: rgb(79, 87, 244);">Queen's
University</a><br>
Kingston, Ontario<br>
CANADA K7L 3N6</font>
      </td>
      <td style="color: rgb(79, 87, 244);" valign="top"><font
 face="Times New Roman" size="+1">ferrallc AT post.queensu.ca<br>
Mackintosh-Corry Rm
A519<br>
ph: 613-533-6658<br>
fx: 613-533-6668<br>
      </font></td>
    </tr>
  </tbody>
</table>
</div>
</body>
</html>