From: Maciej Sobczak <no.spam@no.spam.com>
Subject: Range checking not working as expected?
Date: Thu, 28 Jul 2005 17:00:13 +0200
Date: 2005-07-28T17:00:13+02:00 [thread overview]
Message-ID: <dcarts$doi$1@sunnews.cern.ch> (raw)
Hello,
Consider this:
with Ada.Text_IO, Ada.Integer_Text_IO;
procedure Overflow is
A : Integer := 0;
D : constant Integer := 500000000;
begin
for I in 1..20 loop
Ada.Integer_Text_IO.Put(A);
Ada.Text_IO.New_Line;
A := A + D;
end loop;
end Overflow;
On my machine (PC+Linux+GNAT) it produces the following output:
0
500000000
1000000000
1500000000
2000000000
-1794967296
-1294967296
-794967296
-294967296
205032704
705032704
1205032704
1705032704
-2089934592
-1589934592
-1089934592
-589934592
-89934592
410065408
910065408
Not good - I expected constraint error instead of going round the counter.
What has really confused me is that declaring A as Natural gives the
same effect.
Further investigation with the following declarations:
type MyType is range 0..Integer'Last;
A : MyType := 0;
(and type casts later, when necessary)
showed exactly the same effect. Following this path, I tried this:
type MyType is range 0..Integer'Last - 1;
A : MyType := 0;
And *now* I got what I wanted - the constraint error.
What's going on? Well, I understand the low-level mechanics of this
difference (and also why this might be a border-case for the compiler),
but the question is rather high-level: what does *that* mean? :)
--
Maciej Sobczak : http://www.msobczak.com/
Programming : http://www.msobczak.com/prog/
next reply other threads:[~2005-07-28 15:00 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-28 15:00 Maciej Sobczak [this message]
2005-07-28 15:17 ` Range checking not working as expected? Vinzent 'Gadget' Hoefler
2005-07-28 15:35 ` Maciej Sobczak
2005-07-28 16:25 ` Jeffrey Carter
2005-07-28 18:10 ` Mark Lorenzen
2005-07-29 0:18 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox