-- LA140011.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 library level function body depends
--      on a unit that is changed.
--
-- TEST DESCRIPTION:
--      This test compiles a package, a function that withs the
--      package, and a procedure that withs the function.  Then, 
--      a new version of the package is compiled (in a separate
--      file, simulating an editing modification to the package).
--      Unless automatic recompilation is supported, this 
--      test should fail to link.  Otherwise, the test should 
--      recompile and link the correct version of the withed package 
--      and report "PASSED" at execution time.
--
-- SPECIAL REQUIREMENTS:
--      To build this test:
--         1) Compile the file LA140010 (and include the results in the
--            program library).
--         2) Compile the file LA140011 (and include the results in the
--            program library).
--         3) Compile the file LA140012 (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:
--         LA140010.A
--      -> LA140011.AM
--         LA140012.A
--
-- PASS/FAIL CRITERIA:    
--      The test passes if a link time error message reports that 
--      LA140011_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   LA5007I baseline version
--     08 MAY 95   SAIC        Initial version
--     16 NOV 96   SAIC        Changed unit and file names to conform to
--                             coding standards. Modified prologue.
--     07 DEC 96   SAIC        Moved LA140010_0 to a separate file.
--
--!

function LA140011_0 return integer;

with LA140010_0;
function LA140011_0 return integer is
begin
     return LA140010_0.TC_Var;
end LA140011_0;

with Report; use Report;
with LA140011_0;
procedure LA140011 is
     TC_Val : integer := 0;
begin
     Test ("LA14001", "Check that a compilation unit " &
                      "may not depend semantically on " &
                      "two different versions of the same " &
                      "compilation unit.  Check the case " &
                      "where a library level function body " &
                      "depends on a unit that is changed");

     TC_Val := LA140011_0;
     if TC_Val = 100 then
          Failed ("Revised package not used");
     elsif TC_Val /= -10 then
          Failed ("Incorrect test value returned");
     end if;

     Result;
end LA140011;
