aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/ada/acats/support/fdb0a00.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/ada/acats/support/fdb0a00.a')
-rw-r--r--gcc-4.9/gcc/testsuite/ada/acats/support/fdb0a00.a144
1 files changed, 144 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/ada/acats/support/fdb0a00.a b/gcc-4.9/gcc/testsuite/ada/acats/support/fdb0a00.a
new file mode 100644
index 000000000..4888c24aa
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/ada/acats/support/fdb0a00.a
@@ -0,0 +1,144 @@
+-- FDB0A00.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.
+--*
+--
+-- FOUNDATION DESCRIPTION:
+-- This foundation provides the basis for testing package
+-- System.Storage_Pools. It provides simple implementations of
+-- Allocate and Deallocate that have the side effect of calling
+-- TCTouch.Touch when they are called.
+--
+-- CHANGE HISTORY:
+-- 02 JUN 95 SAIC Initial version
+-- 05 APR 96 SAIC Fixed header for 2.1
+-- 02 JUL 98 EDS Swapped Pool.Avail change with overflow check
+--!
+
+---------------------------------------------------------------- FDB0A00
+
+with Report;
+with System.Storage_Pools;
+with System.Storage_Elements;
+package FDB0A00 is
+
+ type Stack_Heap( Water_Line: System.Storage_Elements.Storage_Count )
+ is new System.Storage_Pools.Root_Storage_Pool with private;
+
+ procedure Allocate(
+ Pool : in out Stack_Heap;
+ Storage_Address : out System.Address;
+ Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count;
+ Alignment : in System.Storage_Elements.Storage_Count);
+
+ procedure Deallocate(
+ Pool : in out Stack_Heap;
+ Storage_Address : in System.Address;
+ Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count;
+ Alignment : in System.Storage_Elements.Storage_Count);
+
+ function Storage_Size( Pool: in Stack_Heap )
+ return System.Storage_Elements.Storage_Count;
+
+ function TC_Largest_Request return System.Storage_Elements.Storage_Count;
+
+ Pool_Overflow : exception;
+
+private
+
+ type Data_Array is array(System.Storage_Elements.Storage_Count range <>)
+ of System.Storage_Elements.Storage_Element;
+
+ type Stack_Heap( Water_Line: System.Storage_Elements.Storage_Count )
+ is new System.Storage_Pools.Root_Storage_Pool with record
+ Data : Data_Array(1..Water_Line);
+ Avail : System.Storage_Elements.Storage_Count := 1;
+ end record;
+
+end FDB0A00;
+
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+with TCTouch;
+package body FDB0A00 is
+
+ Largest_Request_On_Record : System.Storage_Elements.Storage_Count := 0;
+
+ procedure Allocate(
+ Pool : in out Stack_Heap;
+ Storage_Address : out System.Address;
+ Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count;
+ Alignment : in System.Storage_Elements.Storage_Count) is
+ use type System.Storage_Elements.Storage_Offset;
+ begin
+ TCTouch.Touch('A'); --------------------------------------------------- A
+
+ -- set the pointer to the next correctly aligned available address
+ Pool.Avail := Pool.Avail
+ + (Alignment - (Pool.Data(Pool.Avail)'Address mod Alignment));
+
+ -- check for overflow
+ if Pool.Avail + Size_In_Storage_Elements > Pool.Water_Line then
+ raise Pool_Overflow;
+ end if;
+
+ -- set the resulting address to that address
+ Storage_Address := Pool.Data(Pool.Avail)'Address;
+
+ -- update the housekeeping
+ Pool.Avail := Pool.Avail + Size_In_Storage_Elements;
+ Largest_Request_On_Record
+ := System.Storage_Elements.Storage_Count'Max(Largest_Request_On_Record,
+ Size_In_Storage_Elements);
+ exception
+ when Constraint_Error => raise Pool_Overflow; -- in case I missed an edge
+ end Allocate;
+
+ procedure Deallocate(
+ Pool : in out Stack_Heap;
+ Storage_Address : in System.Address;
+ Size_In_Storage_Elements : in System.Storage_Elements.Storage_Count;
+ Alignment : in System.Storage_Elements.Storage_Count) is
+ begin
+ TCTouch.Touch('D'); --------------------------------------------------- D
+
+ -- for the purposes of validation, the simplest possible implementation
+ -- of Deallocate is shown below:
+
+ null;
+
+ end Deallocate;
+
+ function Storage_Size( Pool: in Stack_Heap )
+ return System.Storage_Elements.Storage_Count is
+ begin
+ TCTouch.Touch('S'); --------------------------------------------------- S
+ return Pool.Water_Line;
+ end Storage_Size;
+
+ function TC_Largest_Request return System.Storage_Elements.Storage_Count is
+ begin
+ return Largest_Request_On_Record;
+ end TC_Largest_Request;
+
+end FDB0A00;