-- LA140142.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 procedure depends
--      on another library level procedure that is changed.
--
-- TEST DESCRIPTION:
--      This test compiles a procedure, a procedure that withs 
--      the first procedure, and a procedure that withs the second
--      procedure.  Then, a new version of the first procedure is 
--      compiled (in a separate file, simulating and editing 
--      modification to the procedure).  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 LA140140 (and include the results in the
--            program library).
--         2) Compile the file LA140141 (and include the results in the
--            program library).
--         3) Compile the file LA140142 (and include the results in the
--            program library).
--         4) Compile the file LA140143 (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:
--         LA140140.A
--         LA140141.A
--      -> LA140142.AM
--         LA140143.A
--
-- PASS/FAIL CRITERIA:    
--      The test passes if a link time error message reports that 
--      LA14014_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   LA5007S baseline version
--     26 MAY 95   SAIC        Initial version
--     12 DEC 96   SAIC        Reorganized to permit automatic recompilation.
--
--!

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

procedure LA140142 is
     TC_val : integer := 0;
begin
     Test ("LA14014", "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 procedure depends on " &
                      "another library level procedure that is changed");

     LA14014_1(TC_val);

     if TC_val = 50 then
          Failed ("Revised procedure not used");
     elsif TC_val = 70 then
          Failed ("Revised procedure not used");
     elsif TC_val /= -10 then
          Failed ("Incorrect value returned");
     end if;

     Result;
end LA140142;
