OSDN Git Service

* Makefile.in (dce.o): Add $(EXCEPT_H).
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Apr 2009 14:35:22 +0000 (14:35 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 30 Apr 2009 14:35:22 +0000 (14:35 +0000)
* dce.c: Include except.h and delete redundant vector definitions.
(deletable_insn_p): Return false for non-call insns that can throw
if DF is running.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147002 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/Makefile.in
gcc/ada/ChangeLog
gcc/ada/err_vars.ads
gcc/ada/gnatcmd.adb
gcc/ada/makeutl.adb
gcc/ada/makeutl.ads
gcc/ada/scans.ads
gcc/ada/sinput-l.adb
gcc/ada/sinput.ads
gcc/dce.c

index 8cee45b..b8dca11 100644 (file)
@@ -1,3 +1,10 @@
+2009-04-29  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * Makefile.in (dce.o): Add $(EXCEPT_H).
+       * dce.c: Include except.h and delete redundant vector definitions.
+       (deletable_insn_p): Return false for non-call insns that can throw
+       if DF is running.
+
 2009-04-30  Steven Bosscher  <steven@gcc.gnu.org>
 
        * gcse.c (ae_gen): Remove.
index 66d4590..c578d21 100644 (file)
@@ -2681,7 +2681,7 @@ cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
    $(EXCEPT_H) $(TARGET_H) $(PARAMS_H) rtlhooks-def.h $(TREE_PASS_H) \
    $(REAL_H) $(DF_H) $(DBGCNT_H)
 dce.o : dce.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
-   $(TREE_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) $(DF_H) cselib.h \
+   $(TREE_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) $(EXCEPT_H) $(DF_H) cselib.h \
    $(DBGCNT_H) dce.h $(TIMEVAR_H) $(TREE_PASS_H) $(DBGCNT_H) $(TM_P_H)
 dse.o : dse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
    $(TREE_H) $(TM_P_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
index 01e3ba4..c11325e 100644 (file)
@@ -1,24 +1,3 @@
-2009-04-29  Eric Botcazou  <ebotcazou@adacore.com>
-
-       Revert
-       2009-04-29  Vincent Celier  <celier@adacore.com>
-
-       * sinput-l.adb (Load_File): When preprocessing, set temporarily the
-       Source_File_Index_Table entries for the source, to avoid crash when
-       reporting an error.
-
-       * gnatcmd.adb (Test_If_Relative_Path): Use
-       Makeutl.Test_If_Relative_Path.
-       
-       * makeutl.adb:(Test_If_Relative_Path): Process switches --RTS= only if
-       Including_RTS is True.
-
-       * makeutl.ads (Test_If_Relative_Path): New Boolean parameter
-       Including_RTS defaulted to False.
-
-       * sinput.ads, scans.ads, err_vars.ads: Initialize some variables with
-       a default value.
-
 2009-04-29  Ed Schonberg  <schonberg@adacore.com>
 
        * sem_ch8.adb (Analyze_Subprogram_Renaming): Improve error message on
index 58fca61..c4c28da 100644 (file)
@@ -32,24 +32,31 @@ with Uintp; use Uintp;
 
 package Err_Vars is
 
+   --  All of these variables are set when needed, so they do not need to be
+   --  initialized. However, there is code that saves and restores existing
+   --  values, which may malfunction in -gnatVa mode if the variable has never
+   --  been iniitalized, so we initialize some variables to avoid exceptions
+   --  from invalid values in such cases.
+
    ------------------
    -- Error Counts --
    ------------------
 
-   Serious_Errors_Detected : Nat;
+   Serious_Errors_Detected : Nat := 0;
    --  This is a count of errors that are serious enough to stop expansion,
    --  and hence to prevent generation of an object file even if the
    --  switch -gnatQ is set. Initialized to zero at the start of compilation.
+   --  Initialized for -gnatVa use, see comment above.
 
-   Total_Errors_Detected : Nat;
+   Total_Errors_Detected : Nat := 0;
    --  Number of errors detected so far. Includes count of serious errors and
    --  non-serious errors, so this value is always greater than or equal to the
    --  Serious_Errors_Detected value. Initialized to zero at the start of
-   --  compilation.
+   --  compilation. Initialized for -gnatVa use, see comment above.
 
-   Warnings_Detected : Nat;
+   Warnings_Detected : Nat := 0;
    --  Number of warnings detected. Initialized to zero at the start of
-   --  compilation.
+   --  compilation. Initialized for -gnatVa use, see comment above.
 
    ----------------------------------
    -- Error Message Mode Variables --
@@ -75,7 +82,7 @@ package Err_Vars is
    --  generated on the instantiation (referring to the template) rather
    --  than on the template itself.
 
-   Raise_Exception_On_Error : Nat;
+   Raise_Exception_On_Error : Nat := 0;
    --  If this value is non-zero, then any attempt to generate an error
    --  message raises the exception Error_Msg_Exception, and the error
    --  message is not output. This is used for defending against junk
index 81e9bc4..8310cd2 100644 (file)
@@ -26,6 +26,7 @@
 with GNAT.Directory_Operations; use GNAT.Directory_Operations;
 
 with Csets;
+with Makeutl;
 with MLib.Tgt; use MLib.Tgt;
 with MLib.Utl;
 with MLib.Fil;
@@ -1265,61 +1266,8 @@ procedure GNATCmd is
       Parent : String)
    is
    begin
-      if Switch /= null then
-
-         declare
-            Sw : String (1 .. Switch'Length);
-            Start : Positive := 1;
-
-         begin
-            Sw := Switch.all;
-
-            if Sw (1) = '-' then
-               if Sw'Length >= 3
-                 and then (Sw (2) = 'A' or else
-                           Sw (2) = 'I' or else
-                           Sw (2) = 'L')
-               then
-                  Start := 3;
-
-                  if Sw = "-I-" then
-                     return;
-                  end if;
-
-               elsif Sw'Length >= 4
-                 and then (Sw (2 .. 3) = "aL" or else
-                           Sw (2 .. 3) = "aO" or else
-                           Sw (2 .. 3) = "aI")
-               then
-                  Start := 4;
-
-               elsif Sw'Length >= 7
-                 and then Sw (2 .. 6) = "-RTS="
-               then
-                  Start := 7;
-               else
-                  return;
-               end if;
-            end if;
-
-            --  If the path is relative, test if it includes directory
-            --  information. If it does, prepend Parent to the path.
-
-            if not Is_Absolute_Path (Sw (Start .. Sw'Last)) then
-               for J in Start .. Sw'Last loop
-                  if Sw (J) = Directory_Separator then
-                     Switch :=
-                        new String'
-                              (Sw (1 .. Start - 1) &
-                               Parent &
-                               Directory_Separator &
-                               Sw (Start .. Sw'Last));
-                     return;
-                  end if;
-               end loop;
-            end if;
-         end;
-      end if;
+      Makeutl.Test_If_Relative_Path
+        (Switch, Parent, Including_Non_Switch => False, Including_RTS => True);
    end Test_If_Relative_Path;
 
    -------------------
index 50b9fe2..17c34ff 100644 (file)
@@ -598,7 +598,8 @@ package body Makeutl is
      (Switch               : in out String_Access;
       Parent               : String;
       Including_L_Switch   : Boolean := True;
-      Including_Non_Switch : Boolean := True)
+      Including_Non_Switch : Boolean := True;
+      Including_RTS        : Boolean := False)
    is
    begin
       if Switch /= null then
@@ -628,13 +629,20 @@ package body Makeutl is
                then
                   Start := 4;
 
+               elsif Including_RTS
+                 and then Sw'Length >= 7
+                 and then Sw (2 .. 6) = "-RTS="
+               then
+                  Start := 7;
+
                else
                   return;
                end if;
 
                --  Because relative path arguments to --RTS= may be relative
                --  to the search directory prefix, those relative path
-               --  arguments are not converted.
+               --  arguments are converted only when they include directory
+               --  information.
 
                if not Is_Absolute_Path (Sw (Start .. Sw'Last)) then
                   if Parent'Length = 0 then
@@ -643,6 +651,19 @@ package body Makeutl is
                         & Sw
                         & """) are not allowed");
 
+                  elsif Including_RTS then
+                     for J in Start .. Sw'Last loop
+                        if Sw (J) = Directory_Separator then
+                           Switch :=
+                             new String'
+                               (Sw (1 .. Start - 1) &
+                                Parent &
+                                Directory_Separator &
+                                Sw (Start .. Sw'Last));
+                           return;
+                        end if;
+                     end loop;
+
                   else
                      Switch :=
                        new String'
index bb8ac84..3c9b4d9 100644 (file)
@@ -130,12 +130,14 @@ package Makeutl is
      (Switch               : in out String_Access;
       Parent               : String;
       Including_L_Switch   : Boolean := True;
-      Including_Non_Switch : Boolean := True);
+      Including_Non_Switch : Boolean := True;
+      Including_RTS        : Boolean := False);
    --  Test if Switch is a relative search path switch.
    --  If it is, fail if Parent is the empty string, otherwise prepend the path
    --  with Parent. This subprogram is only called when using project files.
    --  For gnatbind switches, Including_L_Switch is False, because the
-   --  argument of the -L switch is not a path.
+   --  argument of the -L switch is not a path. If Including_RTS is True,
+   --  process also switches --RTS=.
 
    function Path_Or_File_Name (Path : Path_Name_Type) return String;
    --  Returns a file name if -df is used, otherwise return a path name
index 1120f06..6f9bcb8 100644 (file)
@@ -345,36 +345,43 @@ package Scans is
    --  Note: these variables can only be referenced during the parsing of a
    --  file. Reference to any of them from Sem or the expander is wrong.
 
-   Scan_Ptr : Source_Ptr;
+   --  These variables are initialized as required by Scn.Initialize_Scanner,
+   --  and should not be referenced before such a call. However, there are
+   --  situations in which these variables are saved and restored, and this
+   --  may happen before the first Initialize_Scanner call, resulting in the
+   --  assignment of invalid values. To avoid this, and allow building with
+   --  the -gnatVa switch, we initialize some variables to known valid values.
+
+   Scan_Ptr : Source_Ptr := No_Location; -- init for -gnatVa
    --  Current scan pointer location. After a call to Scan, this points
    --  just past the end of the token just scanned.
 
-   Token : Token_Type;
+   Token : Token_Type := No_Token; -- init for -gnatVa
    --  Type of current token
 
-   Token_Ptr : Source_Ptr;
+   Token_Ptr : Source_Ptr := No_Location; -- init for -gnatVa
    --  Pointer to first character of current token
 
-   Current_Line_Start : Source_Ptr;
-   --  Pointer to first character of line containing current token
+   Current_Line_Start : Source_Ptr := No_Location; -- init for -gnatVa
+   --  Pointer to first character of line containing current token.
 
-   Start_Column : Column_Number;
+   Start_Column : Column_Number := No_Column_Number; -- init for -gnatVa
    --  Starting column number (zero origin) of the first non-blank character
    --  on the line containing the current token. This is used for error
    --  recovery circuits which depend on looking at the column line up.
 
-   Type_Token_Location : Source_Ptr;
+   Type_Token_Location : Source_Ptr := No_Location; -- init for -gnatVa
    --  Within a type declaration, gives the location of the TYPE keyword that
    --  opened the type declaration. Used in checking the end column of a record
    --  declaration, which can line up either with the TYPE keyword, or with the
    --  start of the line containing the RECORD keyword.
 
-   Checksum : Word;
+   Checksum : Word := 0; -- init for -gnatVa
    --  Used to accumulate a CRC representing the tokens in the source
    --  file being compiled. This CRC includes only program tokens, and
    --  excludes comments.
 
-   First_Non_Blank_Location : Source_Ptr;
+   First_Non_Blank_Location : Source_Ptr := No_Location; -- init for -gnatVa
    --  Location of first non-blank character on the line containing the
    --  current token (i.e. the location of the character whose column number
    --  is stored in Start_Column).
index 3a7b84e..32f8bde 100644 (file)
@@ -453,6 +453,11 @@ package body Sinput.L is
          --  Preprocess the source if it needs to be preprocessed
 
          if Preprocessing_Needed then
+            --  Set temporarily the Source_File_Index_Table entries for the
+            --  source, to avoid crash when reporting an error.
+
+            Set_Source_File_Index_Table (X);
+
             if Opt.List_Preprocessing_Symbols then
                Get_Name_String (N);
 
index e2e4ec0..ca97716 100644 (file)
@@ -423,8 +423,10 @@ package Sinput is
    -- Global Data --
    -----------------
 
-   Current_Source_File : Source_File_Index;
-   --  Source_File table index of source file currently being scanned
+   Current_Source_File : Source_File_Index := No_Source_File;
+   --  Source_File table index of source file currently being scanned.
+   --  Initialized so that some tools (such as gprbuild) can be built with
+   --  -gnatVa and pragma Initialized_Scalars without problems.
 
    Current_Source_Unit : Unit_Number_Type;
    --  Unit number of source file currently being scanned. The special value
index b37b505..abdd433 100644 (file)
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "regs.h"
 #include "hard-reg-set.h"
 #include "flags.h"
+#include "except.h"
 #include "df.h"
 #include "cselib.h"
 #include "dce.h"
@@ -35,9 +36,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "dbgcnt.h"
 #include "tm_p.h"
 
-DEF_VEC_I(int);
-DEF_VEC_ALLOC_I(int,heap);
-
 
 /* -------------------------------------------------------------------------
    Core mark/delete routines
@@ -118,6 +116,10 @@ deletable_insn_p (rtx insn, bool fast, bitmap arg_stores)
   if (!NONJUMP_INSN_P (insn))
     return false;
 
+  /* Similarly, we cannot delete other insns that can throw either.  */
+  if (df_in_progress && flag_non_call_exceptions && can_throw_internal (insn))
+    return false;
+
   body = PATTERN (insn);
   switch (GET_CODE (body))
     {