From c17fc6f62a85eec85e923c9a808b97d93b84b1ce Mon Sep 17 00:00:00 2001 From: Thomas Quinot Date: Thu, 16 Aug 2007 14:19:02 +0200 Subject: g-dyntab.adb, [...]: (Set_Item): Suppress Range_Check on Allocated_Table. 2007-08-16 Thomas Quinot * g-dyntab.adb, g-table.adb, table.adb: (Set_Item): Suppress Range_Check on Allocated_Table. From-SVN: r127541 --- gcc/ada/g-table.adb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'gcc/ada/g-table.adb') diff --git a/gcc/ada/g-table.adb b/gcc/ada/g-table.adb index 2fd5d32..32d18a0 100644 --- a/gcc/ada/g-table.adb +++ b/gcc/ada/g-table.adb @@ -248,11 +248,20 @@ package body GNAT.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). + -- current 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 := Integer (Index) > Max; -- True if this operation requires storage reallocation (which may -- cgit v1.1