+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
----------------
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;
------------------
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;
begin
if Nkind (Orig) in N_Subexpr then
Earliest := Orig;
- Eloc := Sloc (Earliest);
+ Eloc := Loc;
Search_Tree_First (Orig);
return Earliest;
-- 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;