comp.lang.ada
 help / color / mirror / Atom feed
From: Vinzent Hoefler <ada.rocks@jlfencey.com>
Subject: Re: Optimizing Boundary Checks
Date: Fri, 13 Jun 2003 15:28:06 +0200
Date: 2003-06-13T15:28:06+02:00	[thread overview]
Message-ID: <bccjju$hs492$2@ID-175126.news.dfncis.de> (raw)
In-Reply-To: slrnbeji0e.in.randhol+abuse@kiuk0152.chembio.ntnu.no

Preben Randhol wrote:

>Reason for asking is that I get:
>
>t.adb:10:11: warning: value not in range of subtype of "Standard.integer" defined at line 6
>t.adb:10:11: warning: "constraint_error" will be raised at run time
>
>if I do:
>
>   type Items is array (1 .. 10) of Natural;
>   Boxes : Items;
>
>begin
>   
>   Boxes(11) := 1;

Well, yes. It can be determined at the time the code is compiled,
because

|1 < 11 or 11 > 10

simply results in True here, because everything is constant. Here the
compiler even is allowed to not do anything at all with the array,
instead it is enough to just generate the call to the exception
handler.

But if you'd like to try

|i : Integer;
| ...
|i := 11;
|Boxes (i) := 1;

instead, then I guess, there will be no warning, because at the time
the code is compiled, "i" will *not* be replaced by the constant 11
and the actual value of "i" is probably already out of scope for the
compiler (highly depends on the implementation, I think). Although,
any optimizing stage later probably still only generates a call to the
exception handler if it is smart enough. If it is not, then there must
be a range check here because

|1 <= Integer'First or 10 >= Integer'Last

results in False.

Of course, my understanding of when a compiler generates a range check
might be completely wrong, I am by no means a compiler writer. :)


Vinzent.

-- 
Parents strongly cautioned  --  this  posting  is  intended for mature
audiences  over  18.  It  may  contain some material that many parents
would not find suitable for children and may include intense violence,
sexual situations, coarse language and suggestive dialogue.



  reply	other threads:[~2003-06-13 13:28 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-06-13 11:49 Optimizing Boundary Checks Preben Randhol
2003-06-13 12:03 ` Erlo Haugen
2003-06-13 12:38   ` Vinzent Hoefler
2003-06-13 12:47     ` Preben Randhol
2003-06-13 13:28       ` Vinzent Hoefler
2003-06-13 12:42   ` Preben Randhol
2003-06-13 12:48     ` Preben Randhol
2003-06-13 13:28       ` Vinzent Hoefler [this message]
2003-06-13 13:56         ` Preben Randhol
2003-06-13 14:42           ` Vinzent Hoefler
2003-06-13 15:25             ` Preben Randhol
2003-06-13 15:34               ` Vinzent Hoefler
2003-06-14 10:45                 ` Preben Randhol
2003-06-14 14:59                   ` James Rogers
2003-06-13 13:33       ` Peter Amey
2003-06-13 13:34 ` Martin Dowie
2003-06-13 13:48   ` Vinzent Hoefler
2003-06-13 14:37     ` Martin Dowie
2003-06-13 15:12       ` Vinzent Hoefler
2003-06-14  2:01         ` Jeffrey Carter
2003-06-16 11:23           ` Vinzent Hoefler
2003-06-14  8:34         ` Dmitry A. Kazakov
2003-06-14 17:20         ` Robert I. Eachus
2003-06-16 11:23           ` Vinzent Hoefler
2003-06-18 20:58             ` Brian Gaffney
2003-06-13 13:45 ` Dale Stanbrough
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox