From 9d5f3b7a694ceb774330d45894b38e34bb90f86a Mon Sep 17 00:00:00 2001 From: Yannick Moy Date: Mon, 7 Dec 2020 16:45:23 +0100 Subject: [Ada] Use spans instead of locations for compiler diagnostics gcc/ada/ * errout.adb: (Error_Msg_Internal): Use span instead of location. (Error_Msg, Error_Msg_NEL): Add versions with span parameter. (Error_Msg_F, Error_Msg_FE, Error_Msg_N, Error_Msg_NE, Error_Msg_NW): Retrieve span from node. (First_Node): Use the new First_And_Last_Nodes. (First_And_Last_Nodes): Expand on previous First_Node. Apply to other nodes than expressions. (First_Sloc): Protect against inconsistent locations. (Last_Node): New function based on First_And_Last_Nodes. (Last_Sloc): New function similar to First_Sloc. (Output_Messages): Update output when -gnatdF is used. Use character ~ for making the span visible, similar to what is done in GCC and Clang. * errout.ads (Error_Msg, Error_Msg_NEL): Add versions with span parameter. (First_And_Last_Nodes, Last_Node, Last_Sloc): New subprograms. * erroutc.adb: Adapt to Sptr field being a span. * erroutc.ads (Error_Msg_Object): Change field Sptr from location to span. * errutil.adb: Adapt to Sptr field being a span. * freeze.adb: Use Errout reporting procedures for nodes to get spans. * par-ch3.adb: Likewise. * par-prag.adb: Likewise. * par-util.adb: Likewise. * sem_case.adb: Likewise. * sem_ch13.adb: Likewise. * sem_ch3.adb: Likewise. * sem_prag.adb: Likewise. * types.ads: (Source_Span): New type for spans. (To_Span): Basic constructors for spans. --- gcc/ada/errutil.adb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gcc/ada/errutil.adb') diff --git a/gcc/ada/errutil.adb b/gcc/ada/errutil.adb index d4821fc..0a9f6ad 100644 --- a/gcc/ada/errutil.adb +++ b/gcc/ada/errutil.adb @@ -207,7 +207,7 @@ package body Errutil is Next => No_Error_Msg, Prev => No_Error_Msg, Sfile => Get_Source_File_Index (Sptr), - Sptr => Sptr, + Sptr => To_Span (Sptr), Optr => Optr, Insertion_Sloc => No_Location, Line => Get_Physical_Line_Number (Sptr), @@ -234,7 +234,7 @@ package body Errutil is Errors.Table (Cur_Msg).Sfile < Errors.Table (Next_Msg).Sfile; if Errors.Table (Cur_Msg).Sfile = Errors.Table (Next_Msg).Sfile then - exit when Sptr < Errors.Table (Next_Msg).Sptr; + exit when Sptr < Errors.Table (Next_Msg).Sptr.Ptr; end if; Prev_Msg := Next_Msg; -- cgit v1.1