diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/libgnat/s-parame.ads | 13 | ||||
-rw-r--r-- | gcc/ada/libgnat/s-parame__ae653.ads | 13 | ||||
-rw-r--r-- | gcc/ada/libgnat/s-parame__hpux.ads | 13 | ||||
-rw-r--r-- | gcc/ada/libgnat/s-parame__vxworks.ads | 13 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/sec_stack1.adb | 26 |
7 files changed, 69 insertions, 20 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 66b8491..4c6dd1f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +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 diff --git a/gcc/ada/libgnat/s-parame.ads b/gcc/ada/libgnat/s-parame.ads index ead178a..4e9e81f 100644 --- a/gcc/ada/libgnat/s-parame.ads +++ b/gcc/ada/libgnat/s-parame.ads @@ -55,11 +55,14 @@ package System.Parameters is -- 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 diff --git a/gcc/ada/libgnat/s-parame__ae653.ads b/gcc/ada/libgnat/s-parame__ae653.ads index c15f0eb..e3acbad 100644 --- a/gcc/ada/libgnat/s-parame__ae653.ads +++ b/gcc/ada/libgnat/s-parame__ae653.ads @@ -53,11 +53,14 @@ package System.Parameters is -- 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 diff --git a/gcc/ada/libgnat/s-parame__hpux.ads b/gcc/ada/libgnat/s-parame__hpux.ads index df16d0b..dfd0e08 100644 --- a/gcc/ada/libgnat/s-parame__hpux.ads +++ b/gcc/ada/libgnat/s-parame__hpux.ads @@ -53,11 +53,14 @@ package System.Parameters is -- 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 diff --git a/gcc/ada/libgnat/s-parame__vxworks.ads b/gcc/ada/libgnat/s-parame__vxworks.ads index 9bdca23..cfab9f7 100644 --- a/gcc/ada/libgnat/s-parame__vxworks.ads +++ b/gcc/ada/libgnat/s-parame__vxworks.ads @@ -53,11 +53,14 @@ package System.Parameters is -- 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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2b2695e..bcf7b51 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +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. diff --git a/gcc/testsuite/gnat.dg/sec_stack1.adb b/gcc/testsuite/gnat.dg/sec_stack1.adb new file mode 100644 index 0000000..4caeafe --- /dev/null +++ b/gcc/testsuite/gnat.dg/sec_stack1.adb @@ -0,0 +1,26 @@ +-- { 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; |