trans.c (gnat_to_gnu): Do not set the location on an expression used for a tag.
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 30 Aug 2019 15:15:40 +0000 (15:15 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 30 Aug 2019 15:15:40 +0000 (15:15 +0000)
* gcc-interface/trans.c (gnat_to_gnu): Do not set the location on an
expression used for a tag.

From-SVN: r275197

gcc/ada/ChangeLog
gcc/ada/gcc-interface/trans.c

index 636eb7c9dcd5616c49df3cbd03dd89fa40dc1177..f4c510d9fff06ebabc8d3a5dc3f63c0e7d230b9c 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-30  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (gnat_to_gnu): Do not set the location on an
+       expression used for a tag.
+
 2019-08-30  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/gigi.h (aggregate_type_contains_array_p): Declare.
index 5579986c0c3669e9b7a2c40bceb6f05f6102cabf..e7064c6e72e6bd76806fd72c10b25dc3af01fd1d 100644 (file)
@@ -8727,10 +8727,16 @@ gnat_to_gnu (Node_Id gnat_node)
        set_gnu_expr_location_from_node (gnu_result, gnat_node);
     }
 
-  /* Set the location information on the result if it's not a simple name.
+  /* Set the location information on the result if it's not a simple name
+     or something that contains a simple name, for example a tag, because
+     we don"t want all the references to get the location of the first use.
      Note that we may have no result if we tried to build a CALL_EXPR node
      to a procedure with no side-effects and optimization is enabled.  */
-  else if (kind != N_Identifier && gnu_result && EXPR_P (gnu_result))
+  else if (kind != N_Identifier
+          && !(kind == N_Selected_Component
+               && Chars (Selector_Name (gnat_node)) == Name_uTag)
+          && gnu_result
+          && EXPR_P (gnu_result))
     set_gnu_expr_location_from_node (gnu_result, gnat_node);
 
   /* If we're supposed to return something of void_type, it means we have