comp.lang.ada
 help / color / mirror / Atom feed
From: Lieven Marchand <mal@bewoner.dma.be>
Subject: Re: Idea: Array Boundary Checks on Write Access Only
Date: 1998/06/18
Date: 1998-06-18T00:00:00+00:00	[thread overview]
Message-ID: <6me766$l4t$1@xenon.inbe.net> (raw)
In-Reply-To: 3588D738.4BB32E5A@cl.cam.ac.uk


Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> writes:

> Lieven Marchand wrote:
> > About the only commonly used case that most compilers don't handle is
> > where you put in the check yourself.
> 
> It would be really neat if Ada compilers would keep track not only of
> the declared range of a subtype, but also of the effectively possible
> range of Integer variables inside a certain program fragment as part
> of the flow analysis.
> 
> For instance in code such as
> 
>   if J > 0 then
>      -- compiler notes that here J : range 1 .. J'Last
>      if I > J then
>         -- compiler notes that here I : range 1 .. I'Last
> 
> then the compiler should know that inside the second "if" I > 0 always
> holds. This need not be a full blown automatic proof system, just some
> logic that understands simple inequalities and monotonic expressions
> and that keeps track of the effective maximum and minimum value
> of integer variables and supresses most checks accordingly.
> 

Actually, most algorithms for this kind of thing would do that. Check
out "Elimination of Redundant Array Subscript Range Checks" from
P. Kolte and M. Wolfe for a nice introduction to this stuff. It's
available on the web from cse.ogi.edu but I haven't got the URL
handy. They cite the Alsys and Karlsruhe Ada compiler as previous
work. In their examples (with Fortran) they eliminate typically 98% of
the checks that a naive implementation inserts but I have the feeling
this would be too optimistical in general.  Earlier work by Gupta
using a slightly different approach gives elimination percentages from
52 to 100 with typical values around 80-90.

One of the problems in doing this with Ada is that the language spec
describes the exact behaviour for errors like this. You have to raise
the correct exception after having done all the previous effects. This
restricts the freedom of the compiler to rearrange checks. In
languages with similar semantics for arrays like Modula-3 the only
behaviour prescribed is that it is a checked runtime error with leaves
the implementation with much more freedom. One way to solve this is to
do the rearrangements with the minimal checks to determine a bounds
violation and on detection switch to a slower version of the routine
that has the correct error behaviour but this would introduce a lot of
code bloat.

-- 
Lieven Marchand <mal@bewoner.dma.be> 
------------------------------------------------------------------------------
Few people have a talent for constructive laziness. -- Lazarus Long




  parent reply	other threads:[~1998-06-18  0:00 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1998-06-15  0:00 Idea: Array Boundary Checks on Write Access Only Markus Kuhn
1998-06-15  0:00 ` Peter Amey
1998-06-20  0:00   ` Robert Dewar
1998-06-21  0:00     ` Markus Kuhn
     [not found]       ` <dewar.898490510@merv>
1998-07-09  0:00         ` Frank Klemm
1998-06-17  0:00 ` Stephen Leake
1998-06-17  0:00   ` Markus Kuhn
1998-06-17  0:00     ` Robert A Duff
1998-06-18  0:00     ` Anonymous
1998-06-18  0:00     ` Stuart Palin
     [not found] ` <6m8v02$r2l$1@xenon.inbe.net>
1998-06-18  0:00   ` Markus Kuhn
1998-06-18  0:00     ` dennison
1998-06-18  0:00     ` dennison
1998-06-20  0:00       ` Robert Dewar
1998-06-18  0:00     ` Stuart Palin
1998-06-18  0:00     ` Lieven Marchand [this message]
1998-06-20  0:00       ` Robert I. Eachus
replies disabled

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