-- LA140021.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 unit depends on a package whose
--      declaration is changed.
--
-- TEST DESCRIPTION:
--      This test compiles the specification of a package containing
--      the specification of a procedure.  Then it compiles the body 
--      of the package containing the body of the procedure and the 
--      main test procedure.  The main procedure withs the first 
--      package and calls the procedure in the first package.  Then, 
--      the withed package specification is changed and recompiled.  
--      Unless automatic recompilation is supported, this test should 
--      fail to link.  Otherwise, the test should recompile the package 
--      body and main procedure, link the correct versions of the unit, 
--      and report "PASSED" at execution time.
--
-- SPECIAL REQUIREMENTS:
--      To build this test:
--         1) Compile the file LA140020 (and include the results in the
--            program library).
--         2) Compile the file LA140021 (and include the results in the
--            program library).
--         3) Compile the file LA140022 (and include the results in the
--            program library).
--         4) Attempt to build an executable image.
--         5) If an executable image results, run it.
--
-- TEST FILES:
--      This test consists of the following files:
--         LA140020.A
--      -> LA140021.AM
--         LA140022.A
--
-- PASS/FAIL CRITERIA:                
--      The test passes if a link time error message reports that 
--      LA140020_0 is missing or obsolete and no executable image
--      results.  The test also passes if an executable image is produced
--      and reports "PASSED" (in the case where the implementation supports
--      automatic recompilation).            
--
--
-- CHANGE HISTORY:
--     01 MAY 95   ACVC 1.12   LA5007J baseline version
--     08 MAY 95   SAIC        Initial version
--     16 NOV 96   SAIC        Changed unit and file names to conform to
--                             coding conventions.
--     07 DEC 96   SAIC        Moved LA140020_0 to a separate file.
--
--!

with Report; use Report;
with LA140020_0;

procedure LA140021 is
     TC_Val : integer := 0;
begin
     Test ("LA14002", "Check that a compilation unit may not depend " &
                      "semantically on two different versions of " &
                      "the same compilation unit.  Check the case " &
                      "where a unit depends on a package whose " &
                      "declaration is changed");

     LA140020_0.P (TC_Val);
     if TC_Val = 100 then
          Failed ("Changed unit not used");
     elsif TC_Val /= -10 then
          Failed ("Incorrect test value");
     end if;

     Result;
end LA140021;
