diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2010-06-17 10:42:42 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2010-06-17 10:42:42 +0200 |
commit | 547c595499a0ff69e2d4d2b77cd1cb9ada430f0e (patch) | |
tree | 6f3cfdd61c30785d50933eb8efa6671f6bccafce /gcc | |
parent | cc86c05a5931f8758e048fa3fb8152ce635fa9ed (diff) | |
download | gcc-547c595499a0ff69e2d4d2b77cd1cb9ada430f0e.zip gcc-547c595499a0ff69e2d4d2b77cd1cb9ada430f0e.tar.gz gcc-547c595499a0ff69e2d4d2b77cd1cb9ada430f0e.tar.bz2 |
[multiple changes]
2010-06-17 Robert Dewar <dewar@adacore.com>
* sem_warn.adb (Test_Ref): Abandon scan if access subprogram parameter
found.
2010-06-17 Vincent Celier <celier@adacore.com>
* back_end.adb: Minor comment updates
* switch-c.adb: Remove dependencies on gcc C sources
* gcc-interface/Make-lang.in: Add a-comlin.o to the object file list
for the compiler.
From-SVN: r160884
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/ada/back_end.adb | 8 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/Make-lang.in | 1 | ||||
-rw-r--r-- | gcc/ada/sem_warn.adb | 16 | ||||
-rw-r--r-- | gcc/ada/switch-c.adb | 49 | ||||
-rw-r--r-- | gcc/ada/switch-c.ads | 2 |
6 files changed, 43 insertions, 45 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2d47168..a7f5008 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,15 @@ +2010-06-17 Robert Dewar <dewar@adacore.com> + + * sem_warn.adb (Test_Ref): Abandon scan if access subprogram parameter + found. + +2010-06-17 Vincent Celier <celier@adacore.com> + + * back_end.adb: Minor comment updates + * switch-c.adb: Remove dependencies on gcc C sources + * gcc-interface/Make-lang.in: Add a-comlin.o to the object file list + for the compiler. + 2010-06-17 Ed Schonberg <schonberg@adacore.com> * sem_ch12.adb: propagate Pragma_Enabled flag to generic. diff --git a/gcc/ada/back_end.adb b/gcc/ada/back_end.adb index 974c4b3..28ce1bd 100644 --- a/gcc/ada/back_end.adb +++ b/gcc/ada/back_end.adb @@ -48,15 +48,15 @@ package body Back_End is flag_stack_check : Int; pragma Import (C, flag_stack_check); - -- Indicates if stack checking is enabled, imported from toplev.c + -- Indicates if stack checking is enabled, imported from decl.c save_argc : Nat; pragma Import (C, save_argc); - -- Saved value of argc (number of arguments), imported from toplev.c + -- Saved value of argc (number of arguments), imported from misc.c save_argv : Arg_Array_Ptr; pragma Import (C, save_argv); - -- Saved value of argv (argument pointers), imported from toplev.c + -- Saved value of argv (argument pointers), imported from misc.c function Len_Arg (Arg : Pos) return Nat; -- Determine length of argument number Arg on original gnat1 command line @@ -284,7 +284,7 @@ package body Back_End is Opt.No_Stdlib := True; elsif Is_Front_End_Switch (Argv) then - Scan_Front_End_Switches (Argv, Next_Arg); + Scan_Front_End_Switches (Argv, Integer (Next_Arg)); -- All non-front-end switches are back-end switches diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index ac68435..881213f 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -120,6 +120,7 @@ GNAT1_C_OBJS = ada/b_gnat1.o ada/adadecode.o ada/adaint.o ada/cstreams.o \ GNAT_ADA_OBJS = \ ada/a-charac.o \ ada/a-chlat1.o \ + ada/a-comlin.o \ ada/a-elchha.o \ ada/a-except.o \ ada/a-ioexce.o \ diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index 7a5414f..3964781 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -539,6 +539,22 @@ package body Sem_Warn is return Abandon; end if; + -- If any of the arguments are of type access to subprogram, then + -- we may have funny side effects, so no warning in this case. + + declare + Actual : Node_Id; + begin + Actual := First_Actual (N); + while Present (Actual) loop + if Is_Access_Subprogram_Type (Etype (Actual)) then + return Abandon; + else + Next_Actual (Actual); + end if; + end loop; + end; + -- Declaration of the variable in question elsif Nkind (N) = N_Object_Declaration diff --git a/gcc/ada/switch-c.adb b/gcc/ada/switch-c.adb index 1ad7c3c..6238c54 100644 --- a/gcc/ada/switch-c.adb +++ b/gcc/ada/switch-c.adb @@ -23,6 +23,8 @@ -- -- ------------------------------------------------------------------------------ +with Ada.Command_Line; use Ada.Command_Line; + with Debug; use Debug; with Lib; use Lib; with Osint; use Osint; @@ -38,27 +40,12 @@ with System.WCh_Con; use System.WCh_Con; package body Switch.C is - type Arg_Array is array (Nat) of Big_String_Ptr; - type Arg_Array_Ptr is access Arg_Array; - -- Types to access compiler arguments - - save_argc : Nat; - pragma Import (C, save_argc); - -- Saved value of argc (number of arguments), imported from toplev.c - - save_argv : Arg_Array_Ptr; - pragma Import (C, save_argv); - -- Saved value of argv (argument pointers), imported from toplev.c - RTS_Specified : String_Access := null; -- Used to detect multiple use of --RTS= flag - function Len_Arg (Arg : Pos) return Nat; - -- Determine length of argument number Arg on original gnat1 command line - function Switch_Subsequently_Cancelled (C : String; - Arg_Rank : Pos) + Arg_Rank : Positive) return Boolean; -- This function is called from Scan_Front_End_Switches. It determines if -- the switch currently being scanned is followed by a switch of the form @@ -66,28 +53,13 @@ package body Switch.C is -- and Scan_Front_End_Switches will cancel the effect of the switch. If -- no such switch is found, False is returned. - ------------- - -- Len_Arg -- - ------------- - - function Len_Arg (Arg : Pos) return Nat is - begin - for J in 1 .. Nat'Last loop - if save_argv (Arg).all (Natural (J)) = ASCII.NUL then - return J - 1; - end if; - end loop; - - raise Program_Error; - end Len_Arg; - ----------------------------- -- Scan_Front_End_Switches -- ----------------------------- procedure Scan_Front_End_Switches (Switch_Chars : String; - Arg_Rank : Pos) + Arg_Rank : Positive) is First_Switch : Boolean := True; -- False for all but first switch @@ -1126,19 +1098,16 @@ package body Switch.C is function Switch_Subsequently_Cancelled (C : String; - Arg_Rank : Pos) + Arg_Rank : Positive) return Boolean is - Arg : Pos; - + Arg : Positive; + Max : constant Natural := Argument_Count; begin Arg := Arg_Rank + 1; - while Arg < save_argc loop + while Arg < Max 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)); + Argv : constant String := Argument (Arg); begin if Argv = "-gnat-" & C then return True; diff --git a/gcc/ada/switch-c.ads b/gcc/ada/switch-c.ads index 126183e..84d8812 100644 --- a/gcc/ada/switch-c.ads +++ b/gcc/ada/switch-c.ads @@ -33,7 +33,7 @@ package Switch.C is procedure Scan_Front_End_Switches (Switch_Chars : String; - Arg_Rank : Pos); + Arg_Rank : Positive); -- Procedures to scan out front end switches stored in the given string. -- The first character is known to be a valid switch character, and there -- are no blanks or other switch terminator characters in the string, so |