diff options
author | Florian Weimer <fw@deneb.enyo.de> | 2001-12-22 12:58:51 +0100 |
---|---|---|
committer | Florian Weimer <fw@gcc.gnu.org> | 2001-12-22 12:58:51 +0100 |
commit | 7a73ad55d8dbf2a2cf99268013d41a0af0d95b02 (patch) | |
tree | c00928552111ff9496bdffd2b750652872457a52 /gcc/ada | |
parent | 5637a0ebb90a4b68bc8faaf29362157be0a6b366 (diff) | |
download | gcc-7a73ad55d8dbf2a2cf99268013d41a0af0d95b02.zip gcc-7a73ad55d8dbf2a2cf99268013d41a0af0d95b02.tar.gz gcc-7a73ad55d8dbf2a2cf99268013d41a0af0d95b02.tar.bz2 |
make.adb (Add_Switch): Make Generic_Position a procedure.
* 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.
From-SVN: r48265
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/make.adb | 46 |
2 files changed, 34 insertions, 19 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 6b0289b..52841cf 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2001-12-22 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. + 2001-12-19 Robert Dewar <dewar@gnat.com> * bindgen.adb: Minor reformatting diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb index 6b61456..500caf8 100644 --- a/gcc/ada/make.adb +++ b/gcc/ada/make.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- $Revision$ +-- $Revision: 1.9 $ -- -- -- Copyright (C) 1992-2001 Free Software Foundation, Inc. -- -- -- @@ -554,55 +554,60 @@ 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 allocates 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; @@ -611,13 +616,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; |