aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/table.adb
diff options
context:
space:
mode:
authorThomas Quinot <quinot@adacore.com>2007-08-16 14:19:02 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2007-08-16 14:19:02 +0200
commitc17fc6f62a85eec85e923c9a808b97d93b84b1ce (patch)
treeda148d343ee2c3ee9cc41ed3858d1a899e922588 /gcc/ada/table.adb
parentd48365bc6c150d94584adc7ef17438f8cb195732 (diff)
downloadgcc-c17fc6f62a85eec85e923c9a808b97d93b84b1ce.zip
gcc-c17fc6f62a85eec85e923c9a808b97d93b84b1ce.tar.gz
gcc-c17fc6f62a85eec85e923c9a808b97d93b84b1ce.tar.bz2
g-dyntab.adb, [...]: (Set_Item): Suppress Range_Check on Allocated_Table.
2007-08-16 Thomas Quinot <quinot@adacore.com> * g-dyntab.adb, g-table.adb, table.adb: (Set_Item): Suppress Range_Check on Allocated_Table. From-SVN: r127541
Diffstat (limited to 'gcc/ada/table.adb')
-rw-r--r--gcc/ada/table.adb11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ada/table.adb b/gcc/ada/table.adb
index 273be81..db64c4c 100644
--- a/gcc/ada/table.adb
+++ b/gcc/ada/table.adb
@@ -287,11 +287,20 @@ package body Table is
Allocated_Table : Allocated_Table_T;
pragma Import (Ada, Allocated_Table);
+ pragma Suppress (Range_Check, On => Allocated_Table);
for Allocated_Table'Address use Allocated_Table_Address;
-- Allocated_Table represents the currently allocated array, plus one
-- element (the supplementary element is used to have a convenient
-- way of computing the address just past the end of the current
- -- allocation).
+ -- allocation). Range checks are suppressed because this unit
+ -- uses direct calls to System.Memory for allocation, and this can
+ -- yield misaligned storage (and we cannot rely on the bootstrap
+ -- compiler supporting specifically disabling alignment cheks, so we
+ -- need to suppress all range checks). It is safe to suppress this
+ -- check here because we know that a (possibly misaligned) object
+ -- of that type does actually exist at that address.
+ -- ??? We should really improve the allocation circuitry here to
+ -- guarantee proper alignment.
Need_Realloc : constant Boolean := Int (Index) > Max;
-- True if this operation requires storage reallocation (which may