diff options
author | Florian Weimer <fw@deneb.enyo.de> | 2002-07-15 11:43:06 +0200 |
---|---|---|
committer | Florian Weimer <fw@gcc.gnu.org> | 2002-07-15 11:43:06 +0200 |
commit | 7bc7d27b87e51407d20adf4f071b253262c254fb (patch) | |
tree | 799fff0bddedfe90a427291158f4a4fd8044bcb0 | |
parent | 1ffa74fb247ff23596c583ac6ce80796e6a6623f (diff) | |
download | gcc-7bc7d27b87e51407d20adf4f071b253262c254fb.zip gcc-7bc7d27b87e51407d20adf4f071b253262c254fb.tar.gz gcc-7bc7d27b87e51407d20adf4f071b253262c254fb.tar.bz2 |
make.adb (Add_Switch): Make Generic_Position a procedure.
2002-07-15 Florian Weimer <fw@deneb.enyo.de>
* make.adb (Add_Switch): Make Generic_Position a procedure. The
function approach did not work well because of a side effect (the
function call could reallocate the table which was being indexed
using its result). Fixes ada/4851. [RESURRECTED]
From-SVN: r55457
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/make.adb | 45 |
2 files changed, 34 insertions, 18 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 368a9e1..159b68e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2002-07-15 Florian Weimer <fw@deneb.enyo.de> + + * make.adb (Add_Switch): Make Generic_Position a procedure. The + function approach did not work well because of a side effect (the + function call could reallocate the table which was being indexed + using its result). Fixes ada/4851. [RESURRECTED] + 2002-07-01 Roger Sayle <roger@eyesopen.com> * ada/utils.c (builtin_function): Accept an additional parameter. diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index 80a0f85..6d895f8 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -562,55 +562,61 @@ package body Make is is generic with package T is new Table.Table (<>); - function Generic_Position return Integer; - -- Generic procedure that adds S at the end or beginning of T depending - -- of the value of the boolean Append_Switch. + procedure Generic_Position (New_Position : out Integer); + -- Generic procedure that chooses a position for S in T at the + -- beginning or the end, depending on the boolean Append_Switch. + ---------------------- -- Generic_Position -- ---------------------- - function Generic_Position return Integer is + procedure Generic_Position (New_Position : out Integer) is begin T.Increment_Last; if Append_Switch then - return Integer (T.Last); + New_Position := Integer (T.Last); else for J in reverse T.Table_Index_Type'Succ (T.First) .. T.Last loop T.Table (J) := T.Table (T.Table_Index_Type'Pred (J)); end loop; - return Integer (T.First); + New_Position := Integer (T.First); end if; end Generic_Position; - function Gcc_Switches_Pos is new Generic_Position (Gcc_Switches); - function Binder_Switches_Pos is new Generic_Position (Binder_Switches); - function Linker_Switches_Pos is new Generic_Position (Linker_Switches); + procedure Gcc_Switches_Pos is new Generic_Position (Gcc_Switches); + procedure Binder_Switches_Pos is new Generic_Position (Binder_Switches); + procedure Linker_Switches_Pos is new Generic_Position (Linker_Switches); - function Saved_Gcc_Switches_Pos is new + procedure Saved_Gcc_Switches_Pos is new Generic_Position (Saved_Gcc_Switches); - function Saved_Binder_Switches_Pos is new + procedure Saved_Binder_Switches_Pos is new Generic_Position (Saved_Binder_Switches); - function Saved_Linker_Switches_Pos is new + procedure Saved_Linker_Switches_Pos is new Generic_Position (Saved_Linker_Switches); + New_Position : Integer; + -- Start of processing for Add_Switch begin if And_Save then case Program is when Compiler => - Saved_Gcc_Switches.Table (Saved_Gcc_Switches_Pos) := S; + Saved_Gcc_Switches_Pos (New_Position); + Saved_Gcc_Switches.Table (New_Position) := S; when Binder => - Saved_Binder_Switches.Table (Saved_Binder_Switches_Pos) := S; + Saved_Binder_Switches_Pos (New_Position); + Saved_Binder_Switches.Table (New_Position) := S; when Linker => - Saved_Linker_Switches.Table (Saved_Linker_Switches_Pos) := S; + Saved_Linker_Switches_Pos (New_Position); + Saved_Linker_Switches.Table (New_Position) := S; when None => raise Program_Error; @@ -619,13 +625,16 @@ package body Make is else case Program is when Compiler => - Gcc_Switches.Table (Gcc_Switches_Pos) := S; + Gcc_Switches_Pos (New_Position); + Gcc_Switches.Table (New_Position) := S; when Binder => - Binder_Switches.Table (Binder_Switches_Pos) := S; + Binder_Switches_Pos (New_Position); + Binder_Switches.Table (New_Position) := S; when Linker => - Linker_Switches.Table (Linker_Switches_Pos) := S; + Linker_Switches_Pos (New_Position); + Linker_Switches.Table (New_Position) := S; when None => raise Program_Error; |