+2018-05-25 Patrick Bernardi <bernardi@adacore.com>
+
+ * libgnat/s-parame.ads, libgnat/s-parame__vxworks.ads,
+ libgnat/s-parame__ae653.ads, libgnat/s-parame__hpux.ads (Size_Type):
+ Expand range of type to match the address space of the target.
+ (Task_Storage_Size): Remove unused type.
+
2018-05-25 Ed Schonberg <schonberg@adacore.com>
* sem_res.adb (Set_Mixed_Mode_Operand): If the operand is an expression
-- Task And Stack Allocation Control --
---------------------------------------
- type Task_Storage_Size is new Integer;
- -- Type used in tasking units for task storage size
-
- type Size_Type is new Task_Storage_Size;
- -- Type used to provide task storage size to runtime
+ type Size_Type is range
+ -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+ +(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
+ -- Type used to provide task stack sizes to the runtime. Sized to permit
+ -- stack sizes of up to half the total addressable memory space. This may
+ -- seem excessively large (even for 32-bit systems), however there are many
+ -- instances of users requiring large stack sizes (for example string
+ -- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
-- Task And Stack Allocation Control --
---------------------------------------
- type Task_Storage_Size is new Integer;
- -- Type used in tasking units for task storage size
-
- type Size_Type is new Task_Storage_Size;
- -- Type used to provide task storage size to runtime
+ type Size_Type is range
+ -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+ +(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
+ -- Type used to provide task stack sizes to the runtime. Sized to permit
+ -- stack sizes of up to half the total addressable memory space. This may
+ -- seem excessively large (even for 32-bit systems), however there are many
+ -- instances of users requiring large stack sizes (for example string
+ -- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
-- Task And Stack Allocation Control --
---------------------------------------
- type Task_Storage_Size is new Integer;
- -- Type used in tasking units for task storage size
-
- type Size_Type is new Task_Storage_Size;
- -- Type used to provide task storage size to runtime
+ type Size_Type is range
+ -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+ +(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
+ -- Type used to provide task stack sizes to the runtime. Sized to permit
+ -- stack sizes of up to half the total addressable memory space. This may
+ -- seem excessively large (even for 32-bit systems), however there are many
+ -- instances of users requiring large stack sizes (for example string
+ -- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
-- Task And Stack Allocation Control --
---------------------------------------
- type Task_Storage_Size is new Integer;
- -- Type used in tasking units for task storage size
-
- type Size_Type is new Task_Storage_Size;
- -- Type used to provide task storage size to runtime
+ type Size_Type is range
+ -(2 ** (Integer'(Standard'Address_Size) - 1)) ..
+ +(2 ** (Integer'(Standard'Address_Size) - 1)) - 1;
+ -- Type used to provide task stack sizes to the runtime. Sized to permit
+ -- stack sizes of up to half the total addressable memory space. This may
+ -- seem excessively large (even for 32-bit systems), however there are many
+ -- instances of users requiring large stack sizes (for example string
+ -- processing).
Unspecified_Size : constant Size_Type := Size_Type'First;
-- Value used to indicate that no size type is set
+2018-05-25 Patrick Bernardi <bernardi@adacore.com>
+
+ * gnat.dg/sec_stack1.adb: New testcase.
+
2018-05-25 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/fixedpnt4.adb: New testcase.
--- /dev/null
+-- { dg-do run }
+--
+-- This test checks that we can allocate more than 2GB on systems with word
+-- sizes larger than 32-bits
+
+with Ada.Strings.Fixed; use Ada.Strings.Fixed;
+
+procedure Sec_Stack1 is
+ function Get_A_Big_String return String;
+ -- Return a very close to 2GB string on the secondary stack that would
+ -- overflow the secondary stack if we still had a 2GB limit.
+
+ function Get_A_Big_String return String is
+ String_Size : constant Natural := Natural'Last;
+ begin
+ return String_Size * 'a';
+ end Get_A_Big_String;
+
+begin
+ -- This test only works on systems with more than 32-bits
+ if Standard'Address_Size > 32 then
+ declare
+ R : String := Get_A_Big_String;
+ begin null; end;
+ end if;
+end Sec_Stack1;