diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2017-09-06 12:23:36 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2017-09-06 14:23:36 +0200 |
commit | c1a42658e734cb6445c8e81c8f95c3d99b8c8709 (patch) | |
tree | 12e1c3bf81c55c647624abef0351da1392c6e583 | |
parent | 8a139da059db027e44a86a9942e0d8af24abee95 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 11 |
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)) |