comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Memory limits in Ada where Fortran has none
Date: 16 Mar 2005 14:51:26 -0500
Date: 2005-03-16T14:51:26-05:00	[thread overview]
Message-ID: <wccwts7s729.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: pan.2005.03.08.11.25.00.810114@linuxchip.demon.co.uk.uk.uk

"Dr. Adrian Wrigley" <amtw@linuxchip.demon.co.uk.uk.uk> writes:

> On Sun, 06 Mar 2005 19:05:21 -0500, Robert A Duff wrote:
> 
> > The following works for me:
> > 
> > package Test_Pkg is
> >     X: array (1..400_000_000) of Integer := (others => 999);
> > end Test_Pkg;
> > 
> > with Test_Pkg; use Test_Pkg;
> > with Text_IO; use Text_IO;
> > procedure Test is
> > begin
> >     Put_Line(Integer'Image(X(X'Last)));
> > end Test;
> 
> I am very wary of a test like this because GNAT sometimes
> silently accesses the wrong element of very large data, if I
> remember correctly.

Well, the original poster was complaining that you can't allocate large
amounts of memory in Ada, but you can in Fortran, and I was just trying
to test that.  But, OK, how about this:

package Test_Pkg is
    pragma Elaborate_Body;
    X: array (1..400_000_000) of Integer := (others => 999);
end Test_Pkg;

package body Test_Pkg is
begin
    for I in X'Range loop
        X(I) := Integer'Last - I;
    end loop;
end Test_Pkg;

with Test_Pkg; use Test_Pkg;
with Text_IO; use Text_IO;
procedure Test is
begin
    for I in X'Range loop
        pragma Assert(X(I) = Integer'Last - I); null;
    end loop;
    Put_Line(Integer'Image(X(X'Last)));
end Test;

Works fine, for me.  Takes quite a while to run, of course,
since I don't have that much RAM on my machine.

>... A correctly written program can (and did!)
> thus fail catastrophically.  Large records in particular are
> suspect (on GNAT 3.15p, x86). (I have no test case to hand
> at the moment).  I don't know if it is affected by -gnato
> and default absence of overflow checking.

I guess you should send them a bug report.

> A more comforting test would place a *different* value at
> each location, and check they are all correct!

OK, the above example does that (but it's an array,
not a record).

- Bob



  parent reply	other threads:[~2005-03-16 19:51 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-03-06  0:54 Memory limits in Ada where Fortran has none braver
2005-03-06  1:09 ` Jeff C
2005-03-06  6:18   ` braver
2005-03-06  9:26     ` Martin Krischik
2005-03-06 16:14       ` braver
2005-03-06 16:28         ` Jeff C
2005-03-06 23:09         ` Craig Carey
2005-03-07  0:36           ` braver
2005-03-07  5:55           ` braver
2005-03-08  5:35             ` braver
2005-03-06 14:09     ` Stephen Leake
2005-03-06  9:33 ` Martin Krischik
2005-03-06 22:13 ` Gerald
2005-03-06 23:01 ` Dr. Adrian Wrigley
2005-03-07  0:31   ` braver
2005-03-07 12:47     ` Dr. Adrian Wrigley
2005-03-07  9:41   ` Martin Krischik
2005-03-07 11:59     ` Dr. Adrian Wrigley
2005-03-07 12:26       ` Martin Krischik
2005-03-07  0:05 ` Robert A Duff
2005-03-07 18:04   ` braver
2005-03-16 19:41     ` Robert A Duff
2005-03-17 18:49       ` Martin Krischik
2005-03-08 11:24   ` Dr. Adrian Wrigley
2005-03-09  3:39     ` Craig Carey
2005-03-16 17:39       ` Craig Carey
2005-03-16 19:51     ` Robert A Duff [this message]
2005-03-16 23:47       ` Dr. Adrian Wrigley
replies disabled

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