blob: 81b6e3354aaa008c4eca434b9060587c841ea42c [file] [log] [blame]
-- CD30005.A
--
-- 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 Address clauses are supported for imported subprograms.
--
-- TEST DESCRIPTION:
-- This test imports a simple C function and specifies it's location.
--
-- The implementation may choose to implement
-- Impdef.CD30005_1_Foreign_Address so as to dynamically call a C
-- function that returns the appropriate address for the external
-- function identified by Impdef.CD30005_1_External_Name.
--
-- TEST FILES:
-- CD300050.AM
-- CD300051.C -- the C function: (included below for reference)
--
-- SPECIAL REQUIREMENTS:
-- The file CD300051.C must be compiled with a C compiler.
-- Implementation dialects of C may require alteration of the C program
-- syntax. The program is included here for reference:
--
-- int _cd30005_1( Value )
-- {
-- /* int Value */
--
-- return Value + 1;
-- }
--
-- Implementations may require special linkage commands to include the
-- C code.
--
-- APPLICABILITY CRITERIA:
-- This test is not applicable to implementations not providing an interface
-- to C language units. OTHERWISE:
--
-- All implementations must attempt to compile this test.
--
-- For implementations validating against Systems Programming Annex (C):
-- this test must execute and report PASSED.
--
-- For implementations not validating against Annex C:
-- this test may report compile time errors at one or more points
-- indicated by "-- ANX-C RQMT", in which case it may be graded as inapplicable.
-- Otherwise, the test must execute and report PASSED.
--
--
-- CHANGE HISTORY:
-- 22 JUL 95 SAIC Initial version
-- 30 APR 96 SAIC Added commentary for 2.1
-- 09 MAY 96 SAIC Changed reporting for 2.1
-- 04 NOV 96 SAIC Added use type System.Address
-- 16 FEB 98 EDS Modified documentation.
-- 29 JUN 98 EDS Modified main program name.
--!
----------------------------------------------------------------- CD30005_0
with Impdef;
package CD30005_0 is
-- Check that Address clauses are supported for imported subprograms.
type External_Func_Ref is access function(N:Integer) return Integer;
pragma Convention( C, External_Func_Ref );
function CD30005_1( I: Integer ) return Integer;
pragma Import( C, CD30005_1,
Impdef.CD30005_1_External_Name ); -- N/A => ERROR.
for CD30005_1'Address use
Impdef.CD30005_1_Foreign_Address; -- ANX-C RQMT.
procedure TC_Check_Imports;
end CD30005_0;
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
with Report;
with System.Storage_Elements;
with System.Address_To_Access_Conversions;
package body CD30005_0 is
use type System.Address;
procedure TC_Check_Imports is
S : External_Func_Ref := CD30005_1'Access;
I,K : Integer := 99;
begin
K := S.all(I);
if K /= 100 then
Report.Failed("C program returned" & Integer'Image(K));
end if;
I := CD30005_1( I );
if I /= 100 then
Report.Failed("C program returned" & Integer'Image(I));
end if;
if CD30005_1'Address /= Impdef.CD30005_1_Foreign_Address then
Report.Failed("Address not that specified");
end if;
end TC_Check_Imports;
end CD30005_0;
------------------------------------------------------------------- CD300050
with Report;
with CD30005_0;
procedure CD300050 is
begin -- Main test procedure.
Report.Test ("CD30005",
"Check that Address clauses are supported for imported " &
"subprograms" );
-- Check that Address clauses are supported for imported subprograms.
CD30005_0.TC_Check_Imports;
Report.Result;
end CD300050;