From 4b9e1bc78110d65377acdf23ee3733f8c69baef9 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 9 Oct 2018 15:06:50 +0000 Subject: [PATCH] [Ada] Fix incorrect computation of Component_Size in ASIS mode 2018-10-09 Eric Botcazou gcc/ada/ * gcc-interface/decl.c (gnat_to_gnu_entity) : If this is not a definition, retrieve the expression in all cases even if we are just annotating types. * gcc-interface/trans.c (gnat_to_gnu): Also translate Size attribute for constrained types in this mode. From-SVN: r264983 --- gcc/ada/ChangeLog | 8 ++++++++ gcc/ada/gcc-interface/decl.c | 3 +-- gcc/ada/gcc-interface/trans.c | 5 +++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d393c453eef..924e8d62069 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,11 @@ +2018-10-09 Eric Botcazou + + * gcc-interface/decl.c (gnat_to_gnu_entity) : If + this is not a definition, retrieve the expression in all cases + even if we are just annotating types. + * gcc-interface/trans.c (gnat_to_gnu): Also translate Size + attribute for constrained types in this mode. + 2018-10-09 Eric Botcazou * adaint.c (__gnat_get_executable_suffix_ptr): Add new line. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index ff87529790a..a0d2cbeb159 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -612,8 +612,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) && !No_Initialization (gnat_decl) && !Is_Dispatch_Table_Entity (gnat_entity) && Present (gnat_temp = Expression (gnat_decl)) - && Nkind (gnat_temp) != N_Allocator - && (!type_annotate_only || Compile_Time_Known_Value (gnat_temp))) + && Nkind (gnat_temp) != N_Allocator) gnu_expr = gnat_to_gnu_external (gnat_temp); /* ... fall through ... */ diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 53513e538f1..6757c2fedc0 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -5930,8 +5930,9 @@ gnat_to_gnu (Node_Id gnat_node) || kind == N_Type_Conversion) && Is_Integer_Type (Etype (gnat_node))) && !(kind == N_Attribute_Reference - && Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Length - && Ekind (Etype (Prefix (gnat_node))) == E_Array_Subtype + && (Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Length + || Get_Attribute_Id (Attribute_Name (gnat_node)) == Attr_Size) + && Is_Constrained (Etype (Prefix (gnat_node))) && !Is_Constr_Subt_For_U_Nominal (Etype (Prefix (gnat_node)))) && kind != N_Expanded_Name && kind != N_Identifier -- 2.30.2