aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2017-09-06 12:23:36 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2017-09-06 14:23:36 +0200
commitc1a42658e734cb6445c8e81c8f95c3d99b8c8709 (patch)
tree12e1c3bf81c55c647624abef0351da1392c6e583
parent8a139da059db027e44a86a9942e0d8af24abee95 (diff)
downloadgcc-c1a42658e734cb6445c8e81c8f95c3d99b8c8709.zip
gcc-c1a42658e734cb6445c8e81c8f95c3d99b8c8709.tar.gz
gcc-c1a42658e734cb6445c8e81c8f95c3d99b8c8709.tar.bz2
trans.c (gnat_to_gnu): Try again to translate the prefix after the field if it is incomplete.
2017-09-06 Eric Botcazou <ebotcazou@adacore.com> * gcc-interface/trans.c (gnat_to_gnu) <N_Selected_Component>: Try again to translate the prefix after the field if it is incomplete. From-SVN: r251788
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/trans.c11
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 264dd9b..385c663 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2017-09-06 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (gnat_to_gnu) <N_Selected_Component>: Try
+ again to translate the prefix after the field if it is incomplete.
+
2017-09-06 Bob Duff <duff@adacore.com>
* exp_util.adb (Is_Displace_Call): Make sure it works for indirect
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 9163eb1..5c85c4a 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -6465,6 +6465,17 @@ gnat_to_gnu (Node_Id gnat_node)
{
tree gnu_field = gnat_to_gnu_field_decl (gnat_field);
+ /* If the prefix has incomplete type, try again to translate it.
+ The idea is that the translation of the field just above may
+ have completed it through gnat_to_gnu_entity, in case it is
+ the dereference of an access to Taft Amendment type used in
+ the instantiation of a generic body from an external unit. */
+ if (!COMPLETE_TYPE_P (TREE_TYPE (gnu_prefix)))
+ {
+ gnu_prefix = gnat_to_gnu (gnat_prefix);
+ gnu_prefix = maybe_implicit_deref (gnu_prefix);
+ }
+
gnu_result
= build_component_ref (gnu_prefix, gnu_field,
(Nkind (Parent (gnat_node))