Routine Preserve_Comes_From_Source directly manipulated node tables
without checking whether their arguments are valid and whether the node
table is locked. Now it applies those checks. Also, this routine is now
reused where possible. Semantics is unaffected.

Tested on x86_64-pc-linux-gnu, committed on trunk

2020-06-17  Piotr Trojanek  <troja...@adacore.com>

gcc/ada/

        * atree.adb (Preserve_Comes_From_Source): Rewrite using
        Set_Comes_From_Source and Comes_From_Source, which enforce that
        the parameters are valid.
        * exp_ch4.adb, exp_ch5.adb, sem_ch12.adb, sem_ch6.adb,
        sem_res.adb: Rewrite using Preserve_Comes_From_Source.
--- gcc/ada/atree.adb
+++ gcc/ada/atree.adb
@@ -2071,8 +2071,7 @@ package body Atree is
 
    procedure Preserve_Comes_From_Source (NewN, OldN : Node_Id) is
    begin
-      Nodes.Table (NewN).Comes_From_Source :=
-        Nodes.Table (OldN).Comes_From_Source;
+      Set_Comes_From_Source (NewN, Comes_From_Source (OldN));
    end Preserve_Comes_From_Source;
 
    ----------------------

--- gcc/ada/exp_ch4.adb
+++ gcc/ada/exp_ch4.adb
@@ -937,8 +937,8 @@ package body Exp_Ch4 is
                --  the original allocator node. This is for proper handling of
                --  restriction No_Implicit_Heap_Allocations.
 
-               Set_Comes_From_Source
-                 (Expression (Temp_Decl), Comes_From_Source (N));
+               Preserve_Comes_From_Source
+                 (Expression (Temp_Decl), N);
 
                Set_No_Initialization (Expression (Temp_Decl));
                Insert_Action (N, Temp_Decl);

--- gcc/ada/exp_ch5.adb
+++ gcc/ada/exp_ch5.adb
@@ -3741,7 +3741,7 @@ package body Exp_Ch5 is
                --  specific to pure if statements, however (see
                --  Sem_Ch5.Analyze_If_Statement).
 
-               Set_Comes_From_Source (New_If, Comes_From_Source (N));
+               Preserve_Comes_From_Source (New_If, N);
                return;
 
             --  No special processing for that elsif part, move to next

--- gcc/ada/sem_ch12.adb
+++ gcc/ada/sem_ch12.adb
@@ -5456,7 +5456,7 @@ package body Sem_Ch12 is
 
          --  Subprogram instance comes from source only if generic does
 
-         Set_Comes_From_Source (Act_Decl_Id, Comes_From_Source (Gen_Unit));
+         Preserve_Comes_From_Source (Act_Decl_Id, Gen_Unit);
 
          --  If the instance is a child unit, mark the Id accordingly. Mark
          --  the anonymous entity as well, which is the real subprogram and
@@ -11898,7 +11898,7 @@ package body Sem_Ch12 is
 
          Act_Body_Id :=
            Make_Defining_Identifier (Sloc (Act_Decl_Id), Chars (Act_Decl_Id));
-         Set_Comes_From_Source (Act_Body_Id, Comes_From_Source (Act_Decl_Id));
+         Preserve_Comes_From_Source (Act_Body_Id, Act_Decl_Id);
 
          --  Some attributes of spec entity are not inherited by body entity
 
@@ -12265,7 +12265,7 @@ package body Sem_Ch12 is
          Act_Body_Id :=
            Make_Defining_Identifier (Sloc (Act_Decl_Id), Chars (Act_Decl_Id));
 
-         Set_Comes_From_Source (Act_Body_Id, Comes_From_Source (Act_Decl_Id));
+         Preserve_Comes_From_Source (Act_Body_Id, Act_Decl_Id);
          Set_Defining_Unit_Name (Specification (Act_Body), Act_Body_Id);
 
          Set_Corresponding_Spec (Act_Body, Act_Decl_Id);

--- gcc/ada/sem_ch6.adb
+++ gcc/ada/sem_ch6.adb
@@ -3101,7 +3101,7 @@ package body Sem_Ch6 is
                   --  To ensure proper coverage when body is inlined, indicate
                   --  whether the subprogram comes from source.
 
-                  Set_Comes_From_Source (Subp, Comes_From_Source (N));
+                  Preserve_Comes_From_Source (Subp, N);
 
                   if Present (First_Formal (Body_Id)) then
                      Plist := Copy_Parameter_List (Body_Id);

--- gcc/ada/sem_res.adb
+++ gcc/ada/sem_res.adb
@@ -10744,7 +10744,7 @@ package body Sem_Res is
             --  Set Comes_From_Source on L to preserve warnings for unset
             --  reference.
 
-            Set_Comes_From_Source (L, Comes_From_Source (Reloc_L));
+            Preserve_Comes_From_Source (L, Reloc_L);
          end;
       end if;
 

Reply via email to