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

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


procedure LA140132 is
     TC_val : integer := 0;
begin
     Test ("LA14013", "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 package depends on a " &
                      "package specification that is changed");

     TC_val := LA140131.TC_local;

     if TC_val = 100 then
          Failed ("Revised package specification not used");
     elsif TC_val /= -49 then
          Failed ("Incorrect value returned");
     end if;

     Result;
end LA140132;
