[Ada] Fix ALI source location for dominance markers
authorMatthieu Eyraud <eyraud@adacore.com>
Tue, 23 Feb 2021 07:54:30 +0000 (08:54 +0100)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 16 Jun 2021 08:43:00 +0000 (04:43 -0400)
gcc/ada/

* par_sco.adb (Set_Statement_Entry): Change sloc for dominance
marker.
(Traverse_One): Fix typo.
(Output_Header): Fix comment.

gcc/ada/par_sco.adb

index 638cb35..b4f7609 100644 (file)
@@ -683,9 +683,12 @@ package body Par_SCO is
                --  two levels (through the pragma argument association) to
                --  get to the pragma node itself. For the guard on a select
                --  alternative, we do not have access to the token location for
-               --  the WHEN, so we use the first sloc of the condition itself
-               --  (note: we use First_Sloc, not Sloc, because this is what is
-               --  referenced by dominance markers).
+               --  the WHEN, so we use the first sloc of the condition itself.
+               --  First_Sloc gives the most sensible result, but we have to
+               --  beware of also using it when computing the dominance marker
+               --  sloc (in the Set_Statement_Entry procedure), as this is not
+               --  fully equivalent to the "To" sloc computed by
+               --  Sloc_Range (Guard, To, From).
 
                --  Doesn't this requirement of using First_Sloc need to be
                --  documented in the spec ???
@@ -1579,6 +1582,18 @@ package body Par_SCO is
                         To := No_Location;
                      end if;
 
+                     --  Be consistent with the location determined in
+                     --  Output_Header.
+
+                     if Current_Dominant.K = 'T'
+                        and then Nkind (Parent (Current_Dominant.N))
+                                   in N_Accept_Alternative
+                                    | N_Delay_Alternative
+                                    | N_Terminate_Alternative
+                     then
+                        From := First_Sloc (Current_Dominant.N);
+                     end if;
+
                      Set_Raw_Table_Entry
                        (C1                 => '>',
                         C2                 => Current_Dominant.K,
@@ -1867,7 +1882,7 @@ package body Par_SCO is
                      Process_Decisions_Defer (Cond, 'G');
 
                      --  For an entry body with a barrier, the entry body
-                     --  is dominanted by a True evaluation of the barrier.
+                     --  is dominated by a True evaluation of the barrier.
 
                      Inner_Dominant := ('T', N);
                   end if;