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

Laurent

Reply via email to