From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,666c6fe65641ecc0,start X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 1993-03-03 23:22:08 PST Newsgroups: comp.lang.ada Path: sparky!uunet!pmafire!news.dell.com!swrinde!gatech!howland.reston.ans.net!sol.ctr.columbia.edu!The-Star.honeywell.com!saifr00.cfsat.honeywell.com!murali From: murali@saifr00.cfsat.honeywell.com (R. Muralidhar) Subject: Type conversion from Universal Integer Message-ID: <1993Mar3.224845.18874@saifr00.cfsat.honeywell.com> Organization: Honeywell Air Transport Systems Division Date: Wed, 3 Mar 93 22:48:45 GMT Date: 1993-03-03T22:48:45+00:00 List-Id: Hi, I have the following piece of code ------------------------------------------------------------------------- package P is type A is range 1 .. 10; type Array_Constrained_Type is array ( A range <> ) of Integer; end P; with P; procedure test is Const : constant := 5; type Local_A is range 1 .. 10; type Local_Array_Constrained_Type is array ( Local_A range <> ) of Integer; subtype Array_type1 is P.Array_Constrained_Type(1 .. (const/2)); -- Line A subtype Array_type2 is P.Array_Constrained_Type(1 .. P."/"(const,2)); -- Line B subtype Array_type3 is Local_Array_Constrained_Type(1 .. (const/2)); -- Line C begin null; end test; ------------------------------------------------------------------------- detect an error on DEC Ada compiler, in the line marked "Line A", saying: %ADAC-E-RESTYPINCON, (1) Result type of expression is inconsistent with its context, which requires integer type A in P at line 2 [LRM 8.7] But the same piece of code compiled fine under Verdix Ada Compiler on Sun. Line B compiled fine in both compilers, so did Line C. Am I dealing here with some interpretation of a language feature that is implementation dependent? Or is it that one or the other compiler is wrong? Also, LRM 4.6(15) says that "An implicit conversion of an operand of universal integer to another integer type, ..., can only be applied if the operand is either a numeric literal, a named number, or an attribute;" I take it that the compiler tries to implicitly convert to the integer type A, the upper and lower bounds of the specified ranges in all three lines, Line A, Line B, and Line C. Since (const/2) is an expression and is not a numeric literal, not a named number, and not an attribute, the compiler(s) should have detected errors in all three lines. Any help in explaining this situation will be greatly appreciated. Thanks in advance. _ /|/), , ;_ _ // . (/ /(_<_/ '(_(_X_<_ murali@saifr00.cfsat.honeywell.com Muralidhar Rajappa Honeywell Commercial Flight Systems Group Phoenix AZ -- _ /|/), , ;_ _ // . (/ /(_<_/ '(_(_X_<_ murali@saifr00.cfsat.honeywell.com