This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Ada subtypes and base types (was: Bootstrap failure on trunk: x86_64-linux-gnu)


On Sun, 2006-02-19 at 20:43 +0100, Laurent GUERBY wrote:
> On Sun, 2006-02-19 at 14:23 -0500, Richard Kenner wrote:
> >     "Second, for a given integer type (such as
> >     natural___XDLU_0_2147483647), the type for the nodes in TYPE_MIN_VALUE
> >     and TYPE_MAX_VALUE really should be a natural___XDLU_0_2147483647.
> >     ie, the type of an integer constant should be the same as the type of
> >     its min/max values."
> > 
> > No, the type of the bounds of a subtype should be the *base type*.  That's
> > how the tree has always looked, as far back as  I can remember.
> 
> This is because intermediate computations can produce results
> outside the subtype range but within the base type range (RM 3.5(6)),
> right?
> 
>  type T1 is range 0 .. 127; 
>  -- Compiler will choose some type for T'Base, likely to be -128..127 
>  -- but could be Integer (implementation dependant)
>  subtype T is T1 range 0 .. 100; 
>  R : T := 100+X-X; 
>  -- guaranteed work as long 100+X<=T'Base'Last and 100-X>=T'Base'First
Which leaves us with a very fundamental issue.  Namely that we can not
use TYPE_MIN_VALUE or TYPE_MAX_VALUE for ranges.  That's lame,
incredibly lame.  This nonsense really should be isolated within the
Ada front-end.

In the mean time, what is the safe way to determine the full set of
values any particular object may have, taking into consideration this
Ada braindamage?

jeff



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]