-- LA140062.AM
--
--                             Grant of Unlimited Rights
--
--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
--     unlimited rights in the software and documentation contained herein.
--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
--     this public release, the Government intends to confer upon all 
--     recipients unlimited rights  equal to those held by the Government.  
--     These rights include rights to use, duplicate, release or disclose the 
--     released technical data and computer software in whole or in part, in 
--     any manner and for any purpose whatsoever, and to have or permit others 
--     to do so.
--
--                                    DISCLAIMER
--
--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
--     PARTICULAR PURPOSE OF SAID MATERIAL.
--*
--
-- OBJECTIVE:
--      Check that a compilation unit may not depend semantically 
--      on two different versions of the same compilation unit.
--      Check the case where a generic package depends on another
--      generic package specification.
--
-- TEST DESCRIPTION:
--      This test compiles a generic package specification, then
--      compiles a generic package specification and body, 
--      followed by a procedure that makes a call to a procedure
--      contained inside the second generic package.  Then, the
--      first generic package specification is recompiled, 
--      making the body of the generic package LA140060 obsolete.
--      Unless automatic recompilation is supported this test should 
--      fail to link.  Otherwise, the test should recompile and link 
--      the correct version of the units and report "PASSED" at 
--      execution time.
--
-- SPECIAL REQUIREMENTS:
--      To build this test:
--         1) Compile the file LA140060 (and include the results in the
--            program library).
--         2) Compile the file LA140061 (and include the results in the
--            program library).
--         3) Compile the file LA140062 (and include the results in the
--            program library).
--         4) Compile the file LA140063 (and include the results in the
--            program library).
--         5) Attempt to build an executable image.
--         6) If an executable image results, run it.
--
-- TEST FILES:
--      This test consists of the following files:
--         LA140060.A
--         LA140061.A
--      -> LA140062.AM
--         LA140063.A
--
-- PASS/FAIL CRITERIA:                
--      Expect a link-time error message that the body of generic
--      package LA14006_1 is missing or obsolete.  If automatic
--      recompilation is supported, and an executable image is 
--      built, expect a "PASSED" message from execution.
--
--
-- CHANGE HISTORY:
--     01 MAY 95   ACVC 1.12   LA5008K baseline version
--     09 MAY 95   SAIC        Initial version
--     17 NOV 96   SAIC        Modified unit names and prologue to conform
--                             to coding conventions.
--     07 DEC 96   SAIC        Moved LA14006_0 to a separate file. Added
--                             pragma Elaborate to context clause of LA14006_2.
--
--!

with LA14006_0;
with LA14006_types;
use  LA14006_types;
generic
     type additional is (<>);
     add_val : additional;
package LA14006_1 is
     type T3 is new t_type with record
          h: additional := add_val;
     end record;
 
     procedure P (TC_Change : out integer);

     package inst is new LA14006_0 (T3);
end LA14006_1;

----------------------------------------------------------------

package body LA14006_1 is
     procedure P (TC_Change : out integer) is 
     begin 
           TC_Change := inst.TC_Var.g;
     end P;
end LA14006_1;

----------------------------------------------------------------

with LA14006_1;
pragma Elaborate (LA14006_1);
package LA14006_2 is new LA14006_1 (integer, 300);

----------------------------------------------------------------

with Report; use Report;
with LA14006_2;
procedure LA140062 is
     TC_Val : integer := 0;
begin
     Test ("LA14006", "Check that a compilation unit may not " &
                      "depend semantically on two different " &
                      "versions of the same compilation unit. " &
                      "Check the case where a generic package " &
                      "depends on another generic package " &
                      "specification");

     LA14006_2.P (TC_Val);

     if TC_Val = 100 then
          Failed ("Obsolete unit used in elaboration");
     elsif TC_Val /= -10 then
          Failed ("Incorrect test value received");
     end if;

     Result;
end LA140062;
