-- LA140082.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 subunit function body depends
--      on a unit that is changed.
--
-- TEST DESCRIPTION:
--      This test compiles a function, separate subunit function 
--      body, and a procedure that withs the function.  Then, 
--      a new version of the parent function is compiled (in a separate
--      file, simulating and 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 LA140080 (and include the results in the
--            program library).
--         2) Compile the file LA140081 (and include the results in the
--            program library).
--         3) Compile the file LA140082 (and include the results in the
--            program library).
--         4) Compile the file LA140083 (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:
--         LA140080.A
--         LA140081.A
--      -> LA140082.AM
--         LA140083.A
--
-- PASS/FAIL CRITERIA:    
--      The test passes if a link time error message reports that 
--      LA14008_0.LA14008_1 is missing or obsolete and no executable image
--      results.  The test passes if an executable image is produced
--      and reports "PASSED" (in case the implementation supports
--      automatic recompilation).            
--
-- CHANGE HISTORY:
--     01 MAY 95   ACVC 1.12  LA5007M baseline version
--     25 MAY 95   SAIC       Initial version
--     10 DEC 96   SAIC       Reorganized to permit automatic recompilation.
--
--!

separate (LA14008_0)

function LA14008_1 return integer is
begin
     return LA14008_0.TC_var;
end LA14008_1;

    --==================================================================--
 
with Report; use Report;
with LA14008_0;         
     
procedure LA140082 is
     TC_val    : integer := 0;
begin
     Test ("LA14008", "Check that a compilation unit may not depend " &
                      "semantically on two different versions of " &
                      "the same compilation unit.  Check the case " &
                      "where a subunit function body depends on a " &
                      "unit that is changed");
 
     TC_val := LA14008_0;
 
     if TC_val = 100 then
          Failed ("Revised unit not used");
     elsif TC_val /= -10 then
          Failed ("Incorrect value returned");
     end if;
 
     Result;
end LA140082;
