From 4c60de0c970a2b152748ec3c65f65328b4689471 Mon Sep 17 00:00:00 2001 From: Yannick Moy Date: Tue, 2 Aug 2011 13:46:38 +0000 Subject: [PATCH] errout.adb (First_Node): minor renaming 2011-08-02 Yannick Moy * errout.adb (First_Node): minor renaming * restrict.adb (Check_Formal_Restriction): put restriction warning on first node. From-SVN: r177155 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/errout.adb | 24 +++++++++++++++--------- gcc/ada/restrict.adb | 10 +++------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0308954eed8..1acadb7e970 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2011-08-02 Yannick Moy + + * errout.adb (First_Node): minor renaming + * restrict.adb (Check_Formal_Restriction): put restriction warning on + first node. + 2011-08-02 Yannick Moy * sem_res.adb (Resolve_Logical_Op): ensure N is a binary operator diff --git a/gcc/ada/errout.adb b/gcc/ada/errout.adb index 076fec223df..169540ecdb9 100644 --- a/gcc/ada/errout.adb +++ b/gcc/ada/errout.adb @@ -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; diff --git a/gcc/ada/restrict.adb b/gcc/ada/restrict.adb index 08af7e688f9..883128a7d62 100644 --- a/gcc/ada/restrict.adb +++ b/gcc/ada/restrict.adb @@ -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; -- 2.30.2