errout.adb (First_Node): minor renaming
authorYannick Moy <moy@adacore.com>
Tue, 2 Aug 2011 13:46:38 +0000 (13:46 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 2 Aug 2011 13:46:38 +0000 (15:46 +0200)
2011-08-02  Yannick Moy  <moy@adacore.com>

* errout.adb (First_Node): minor renaming
* restrict.adb (Check_Formal_Restriction): put restriction warning on
first node.

From-SVN: r177155

gcc/ada/ChangeLog
gcc/ada/errout.adb
gcc/ada/restrict.adb

index 0308954eed809c13701718a32917e9989eb90dd9..1acadb7e970807f99690c4eabbaccfbf17e8eb83 100644 (file)
@@ -1,3 +1,9 @@
+2011-08-02  Yannick Moy  <moy@adacore.com>
+
+       * errout.adb (First_Node): minor renaming
+       * restrict.adb (Check_Formal_Restriction): put restriction warning on
+       first node.
+
 2011-08-02  Yannick Moy  <moy@adacore.com>
 
        * sem_res.adb (Resolve_Logical_Op): ensure N is a binary operator
index 076fec223df4ba708c55d87a4ac8370adb554e62..169540ecdb97feb07c8a06db0dcd62e7f50a3f58 100644 (file)
@@ -1307,9 +1307,9 @@ package body Errout is
    ----------------
 
    function First_Node (C : Node_Id) return Node_Id is
-      L        : constant Source_Ptr        := Sloc (Original_Node (C));
       Orig     : constant Node_Id           := Original_Node (C);
-      Sfile    : constant Source_File_Index := Get_Source_File_Index (L);
+      Loc      : constant Source_Ptr        := Sloc (Orig);
+      Sfile    : constant Source_File_Index := Get_Source_File_Index (Loc);
       Earliest : Node_Id;
       Eloc     : Source_Ptr;
 
@@ -1324,20 +1324,26 @@ package body Errout is
       ------------------
 
       function Test_Earlier (N : Node_Id) return Traverse_Result is
-         Loc : constant Source_Ptr := Sloc (Original_Node (N));
+         Norig : constant Node_Id    := Original_Node (N);
+         Loc   : constant Source_Ptr := Sloc (Norig);
 
       begin
-         --  Check for earlier. The tests for being in the same file ensures
-         --  against strange cases of foreign code somehow being present. We
-         --  don't want wild placement of messages if that happens, so it is
-         --  best to just ignore this situation.
+         --  Check for earlier
 
          if Loc < Eloc
+
+           --  Ignore nodes with no useful location information
+
            and then Loc /= Standard_Location
            and then Loc /= No_Location
+
+           --  Ignore nodes from a different file. This ensures against cases
+           --  of strange foreign code somehow being present. We don't want
+           --  wild placement of messages if that happens.
+
            and then Get_Source_File_Index (Loc) = Sfile
          then
-            Earliest := Original_Node (N);
+            Earliest := Norig;
             Eloc     := Loc;
          end if;
 
@@ -1349,7 +1355,7 @@ package body Errout is
    begin
       if Nkind (Orig) in N_Subexpr then
          Earliest := Orig;
-         Eloc := Sloc (Earliest);
+         Eloc := Loc;
          Search_Tree_First (Orig);
          return Earliest;
 
index 08af7e688f91f1a3f826db119cfa6d42ce22a28b..883128a7d62c8816db526579a5c23338a54c2849 100644 (file)
@@ -123,18 +123,14 @@ package body Restrict is
          --  Error_Msg_Sloc to the location of the pragma restriction, save and
          --  restore the previous value of the global variable around the call.
 
-         --  ??? N in call to Check_Restriction should be First_Node (N), but
-         --  this causes an exception to be raised when analyzing osint.adb.
-         --  To be modified together with the calls to Error_Msg_N.
-
          Save_Error_Msg_Sloc := Error_Msg_Sloc;
-         Check_Restriction (Msg_Issued, SPARK, N);  --  N -> First_Node (N)
+         Check_Restriction (Msg_Issued, SPARK, First_Node (N));
          Error_Msg_Sloc := Save_Error_Msg_Sloc;
 
          if Msg_Issued then
-            Error_Msg_N ("\\| " & Msg, N);  --  Error_Msg_N -> Error_Msg_F
+            Error_Msg_F ("\\| " & Msg, N);
          elsif SPARK_Mode then
-            Error_Msg_N ("|~~" & Msg, N);  --  Error_Msg_N -> Error_Msg_F
+            Error_Msg_F ("|~~" & Msg, N);
          end if;
       end if;
    end Check_Formal_Restriction;