| -- 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; |