[Ada] Fix incorrect computation of Component_Size in ASIS mode
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 9 Oct 2018 15:06:50 +0000 (15:06 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 9 Oct 2018 15:06:50 +0000 (15:06 +0000)
2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: 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
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/trans.c

index d393c45..924e8d6 100644 (file)
@@ -1,5 +1,13 @@
 2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>
 
+       * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Constant>: 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  <ebotcazou@adacore.com>
+
        * adaint.c (__gnat_get_executable_suffix_ptr): Add new line.
        (__gnat_locate_exec): Check that HOST_EXECUTABLE_SUFFIX is not
        empty before doing a string search for it.
index ff87529..a0d2cbe 100644 (file)
@@ -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 ... */
index 53513e5..6757c2f 100644 (file)
@@ -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