-- LA140122.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 depends
--      on a unit that is changed.
--
-- TEST DESCRIPTION:
--      This test compiles a function, a function that withs 
--      the first function, and a procedure that withs the second
--      function.  Then, a new version of the first function 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 LA140120 (and include the results in the
--            program library).
--         2) Compile the file LA140121 (and include the results in the
--            program library).
--         3) Compile the file LA140122 (and include the results in the
--            program library).
--         4) Compile the file LA140123 (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:
--         LA140120.A
--         LA140121.A
--      -> LA140122.AM
--         LA140123.A
--
-- PASS/FAIL CRITERIA:    
--      The test passes if a link time error message reports that 
--      LA14012_1 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   LA5007Q baseline version
--     25 MAY 95   SAIC        Initial version
--     17 NOV 96   SAIC        Modified unit names and prologue to conform
--                             to coding conventions.
--
--!

with Report; use Report;
with LA14012_1;              -- when LA14012_0 is revised and recompiled,
                             -- this semantic dependency has to be 
                             -- handled


procedure LA140122 is
     TC_local : integer := 5;
begin
     Test ("LA14012", "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 depends on a " &
                      "unit that is changed");

     TC_local := LA14012_1;

     if TC_local = 100 then
          Failed ("Revised function not used");
     elsif TC_local /= -10 then
          Failed ("Incorrect value returned");
     end if;

     Result;
end LA140122;
