From: Eric Botcazou Date: Fri, 12 Jan 2024 09:50:01 +0000 (+0100) Subject: ada: Fix crash on aliased constant with packed array type and -g switch X-Git-Tag: basepoints/gcc-16~8817 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0967e06caaa606eec7b2f222bb9926ec6523ea02;p=thirdparty%2Fgcc.git ada: Fix crash on aliased constant with packed array type and -g switch The problem is that we build a template whose array field is not an array in the case of an aliased object with nominal unconstrained array subtype. gcc/ada/ * gcc-interface/decl.cc (gnat_to_gnu_entity) : For an array allocated with its bounds, make sure to have an array type to build the template. --- diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc index ca174bff009..41d5c29a17c 100644 --- a/gcc/ada/gcc-interface/decl.cc +++ b/gcc/ada/gcc-interface/decl.cc @@ -939,6 +939,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition) && !type_annotate_only) { tree gnu_array = gnat_to_gnu_type (Base_Type (gnat_type)); + /* Make sure to have an array type for the template. */ + if (TYPE_IS_PADDING_P (gnu_type)) + gnu_type = TREE_TYPE (TYPE_FIELDS (gnu_type)); gnu_type = build_unc_object_type_from_ptr (TREE_TYPE (gnu_array), gnu_type,