comp.lang.ada
 help / color / mirror / Atom feed
From: Keith Thompson <kst@cts.com>
Subject: Re: Yet another gnat/TFFE difference
Date: 1999/05/22
Date: 1999-05-22T09:36:14+00:00	[thread overview]
Message-ID: <yecwvy15tv5.fsf@king.cts.com> (raw)
In-Reply-To: 7i4vjh$n4t$1@nnrp1.deja.com

dennison@telepath.com writes:
> I have found one last difference between Gnat and Tucker's favorite
> front end (both Aonix and GreenHills variants). This one has to do with
> array slicing and type conversions. Assume I have the following code:
> 
> 
> type T1 is array (1..2250) of Float;
> O1 : T1;
> 
> type T2 is array (1..5) of Float;
> O2 : T2:
> 
> ...
> 
> O2(1..2) := T2 (O1 (2..3));
> 
> 
> Gnat has no problem with this, which makes sense as the slices are the
> same size and the base type of the arrays are the same.

I think you mean element type, not base type.

> TFFE compilers blow up with a constrataint error here. I'm gessing that
> is because objects of type T2 have to be 5 elements long, but my slice
> is 2 elements.

A conversion to subtype T2 includes a constraint check against T2's
bounds, 1..5, so the Constraint_Error is correct.

> I have two questions here: First off, which vendor gets the bug
> report? :-)

Probably neither one.  I just tried this with GNAT 3.11p, and it did
raise Constraint_Error.

> Secondly, does anyone have any good ideas about how to make the TFFE
> compilers happy? It doesn't make sense that I should have to make two
> separate assignments to do this. I know making T1 a subtype of T2 would
> work. But in the environment this came up in that is not a feasable
> solution (T2 is actually sized based on generic-derived parameters that
> are only known at runtime).

You're doing an array subtype conversion; what you want is an array
base type conversion.  The problem is, the base types are anonymous.
Here's something that should do what you want:

   type UT1 is array(Positive  range <>) of Float;
   subtype T1 is UT1(1..2250);
   O1 : T1;

   type UT2 is array(Positive  range <>) of Float;
   subtype T2 is UT2(1..5);
   O2 : T2;

   ...

   O2(1..2) := UT2 (O1 (2..3));

(I'm probably misusing the terms "subtype" and "base type".)

-- 
Keith Thompson (The_Other_Keith) kst@cts.com  <http://www.ghoti.net/~kst>
San Diego Supercomputer Center  <http://www.sdsc.edu>                 <*>
Techno-geek.  Mouse bigger than phone.  Bites heads off virtual chickens.




  reply	other threads:[~1999-05-22  0:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-05-22  0:00 Yet another gnat/TFFE difference dennison
1999-05-22  0:00 ` Keith Thompson [this message]
1999-05-22  0:00   ` dennison
replies disabled

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