diff options
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1ea386b..6587ffd 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 2011-06-06 Eric Botcazou <ebotcazou@adacore.com> + * gcc-interface/trans.c (Identifier_to_gnu): Also handle deferred + constants whose full view has discriminants specially. + +2011-06-06 Eric Botcazou <ebotcazou@adacore.com> + * gcc-interface/utils.c: Include diagnostic.h. (gnat_write_global_declarations): Output debug information for all global type declarations before finalizing the compilation unit. diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 5f08877..ca47e93 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -906,9 +906,11 @@ Identifier_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p) attribute Position, generated for dispatching code (see Make_DT in exp_disp,adb). In that case we need the type itself, not is parent, in particular if it is a derived type */ - if (Is_Private_Type (gnat_temp_type) - && Has_Unknown_Discriminants (gnat_temp_type) - && Ekind (gnat_temp) == E_Constant + if (Ekind (gnat_temp) == E_Constant + && Is_Private_Type (gnat_temp_type) + && (Has_Unknown_Discriminants (gnat_temp_type) + || (Present (Full_View (gnat_temp_type)) + && Has_Discriminants (Full_View (gnat_temp_type)))) && Present (Full_View (gnat_temp))) { gnat_temp = Full_View (gnat_temp); |