summaryrefslogtreecommitdiff
path: root/gcc/ada/back_end.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-17 09:06:41 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-17 09:06:41 +0000
commita050681322cb0bb78bfc0900406c132ede630f81 (patch)
tree25c725c1b73e3d2b69447a18fb45899560dec4d2 /gcc/ada/back_end.adb
parentd3ef794cfe8397e3339bdefa952bb32e9874d22c (diff)
downloadgcc-a050681322cb0bb78bfc0900406c132ede630f81.tar.gz
2010-06-17 Vincent Celier <celier@adacore.com>
* back_end.adb (Scan_Compiler_Arguments): Put all arguments in new local Argument_List variable Args. * switch-c.adb (Scan_Front_End_Switches): New Argument_List argument Args. (Switch_Subsequently_Cancelled): New Argument_List argument Args. Look for subsequent switches in Args. * switch-c.ads (Scan_Front_End_Switches): New Argument_List argument Args. * gcc-interface/Make-lang.in: Update dependencies. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160890 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/back_end.adb')
-rw-r--r--gcc/ada/back_end.adb32
1 files changed, 25 insertions, 7 deletions
diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb
index 28ce1bd6c7e..41372fc33f3 100644
--- a/gcc/ada/back_end.adb
+++ b/gcc/ada/back_end.adb
@@ -40,6 +40,8 @@ with Switch.C; use Switch.C;
with System; use System;
with Types; use Types;
+with System.OS_Lib; use System.OS_Lib;
+
package body Back_End is
type Arg_Array is array (Nat) of Big_String_Ptr;
@@ -162,7 +164,7 @@ package body Back_End is
procedure Scan_Compiler_Arguments is
- Next_Arg : Pos;
+ Next_Arg : Positive;
-- Next argument to be scanned
Output_File_Name_Seen : Boolean := False;
@@ -222,6 +224,11 @@ package body Back_End is
end if;
end Scan_Back_End_Switches;
+ -- Local variables
+
+ Arg_Count : constant Natural := Natural (save_argc - 1);
+ Args : Argument_List (1 .. Arg_Count);
+
-- Start of processing for Scan_Compiler_Arguments
begin
@@ -229,15 +236,26 @@ package body Back_End is
Opt.Stack_Checking_Enabled := (flag_stack_check /= 0);
+ -- Put the arguments in Args
+
+ for Arg in Pos range 1 .. save_argc - 1 loop
+ declare
+ Argv_Ptr : constant Big_String_Ptr := save_argv (Arg);
+ Argv_Len : constant Nat := Len_Arg (Arg);
+ Argv : constant String :=
+ Argv_Ptr (1 .. Natural (Argv_Len));
+
+ begin
+ Args (Positive (Arg)) := new String'(Argv);
+ end;
+ end loop;
+
-- Loop through command line arguments, storing them for later access
Next_Arg := 1;
- while Next_Arg < save_argc loop
+ while Next_Arg < Args'Last loop
Look_At_Arg : declare
- Argv_Ptr : constant Big_String_Ptr := save_argv (Next_Arg);
- Argv_Len : constant Nat := Len_Arg (Next_Arg);
- Argv : constant String :=
- Argv_Ptr (1 .. Natural (Argv_Len));
+ Argv : constant String := Args (Next_Arg).all;
begin
-- If the previous switch has set the Output_File_Name_Present
@@ -284,7 +302,7 @@ package body Back_End is
Opt.No_Stdlib := True;
elsif Is_Front_End_Switch (Argv) then
- Scan_Front_End_Switches (Argv, Integer (Next_Arg));
+ Scan_Front_End_Switches (Argv, Args, Next_Arg);
-- All non-front-end switches are back-end switches