diff options
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/table.adb | 4 | ||||
-rw-r--r-- | gcc/ada/table.ads | 17 |
3 files changed, 20 insertions, 8 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index b7bacdc..7c09cc0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2019-08-14 Bob Duff <duff@adacore.com> + + * table.adb: Assert that the table is not locked when increasing + Last, even if it doesn't cause reallocation. In other words, + assert that on operations that MIGHT cause reallocation. + * table.ads: Fix comment accordingly. + 2019-08-14 Arnaud Charlet <charlet@adacore.com> * doc/gnat_ugn/gnat_and_program_execution.rst: Remove diff --git a/gcc/ada/table.adb b/gcc/ada/table.adb index ebbb857..9794047 100644 --- a/gcc/ada/table.adb +++ b/gcc/ada/table.adb @@ -80,6 +80,7 @@ package body Table is procedure Append (New_Val : Table_Component_Type) is begin + pragma Assert (not Locked); Set_Item (Table_Index_Type (Last_Val + 1), New_Val); end Append; @@ -120,6 +121,7 @@ package body Table is procedure Increment_Last is begin + pragma Assert (not Locked); Last_Val := Last_Val + 1; if Last_Val > Max then @@ -384,6 +386,8 @@ package body Table is procedure Set_Last (New_Val : Table_Index_Type) is begin + pragma Assert (Int (New_Val) <= Last_Val or else not Locked); + if Int (New_Val) < Last_Val then Last_Val := Int (New_Val); diff --git a/gcc/ada/table.ads b/gcc/ada/table.ads index a816c73..5f03cf3 100644 --- a/gcc/ada/table.ads +++ b/gcc/ada/table.ads @@ -130,14 +130,15 @@ package Table is -- First .. Last. Locked : Boolean := False; - -- Table expansion is permitted only if this switch is set to False. A - -- client may set Locked to True, in which case any attempt to expand - -- the table will cause an assertion failure. Note that while a table - -- is locked, its address in memory remains fixed and unchanging. This - -- feature is used to control table expansion during Gigi processing. - -- Gigi assumes that tables other than the Uint and Ureal tables do - -- not move during processing, which means that they cannot be expanded. - -- The Locked flag is used to enforce this restriction. + -- Increasing the value of Last is permitted only if this switch is set + -- to False. A client may set Locked to True, in which case any attempt + -- to increase the value of Last (which might expand the table) will + -- cause an assertion failure. Note that while a table is locked, its + -- address in memory remains fixed and unchanging. This feature is used + -- to control table expansion during Gigi processing. Gigi assumes that + -- tables other than the Uint and Ureal tables do not move during + -- processing, which means that they cannot be expanded. The Locked + -- flag is used to enforce this restriction. procedure Init; -- This procedure allocates a new table of size Initial (freeing any |