[Ada] Sem_Util: fix a bug in New_Copy_Tree
authorJavier Miranda <miranda@adacore.com>
Wed, 14 Aug 2019 09:51:29 +0000 (09:51 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Aug 2019 09:51:29 +0000 (09:51 +0000)
No impact on GCC-based compilation.

2019-08-14  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* sem_util.adb (New_Copy_Tree.Copy_Node_With_Replacement):
Update the Chars attribute of identifiers.

From-SVN: r274455

gcc/ada/ChangeLog
gcc/ada/sem_util.adb

index 1d13947..c661a38 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-14  Javier Miranda  <miranda@adacore.com>
+
+       * sem_util.adb (New_Copy_Tree.Copy_Node_With_Replacement):
+       Update the Chars attribute of identifiers.
+
 2019-08-14  Yannick Moy  <moy@adacore.com>
 
        * sem_spark.adb, sem_spark.ads (Is_Legal): New function exposed
index db9233a..10f8ffb 100644 (file)
@@ -20427,6 +20427,21 @@ package body Sem_Util is
                Update_First_Real_Statement
                  (Old_HSS => N,
                   New_HSS => Result);
+
+            --  Update the Chars attribute of identifiers
+
+            elsif Nkind (N) = N_Identifier then
+
+               --  The Entity field of identifiers that denote aspects is used
+               --  to store arbitrary expressions (and hence we must check that
+               --  they reference an actual entity before copying their Chars
+               --  value).
+
+               if Present (Entity (Result))
+                 and then Nkind (Entity (Result)) in N_Entity
+               then
+                  Set_Chars (Result, Chars (Entity (Result)));
+               end if;
             end if;
          end if;