From: Eric Botcazou Date: Fri, 23 Aug 2024 07:44:06 +0000 (+0200) Subject: ada: Plug loophole exposed by previous change X-Git-Tag: basepoints/gcc-16~6147 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9362abf5e81eb2e6e35f55f36ff8e7a31aef4e9d;p=thirdparty%2Fgcc.git ada: Plug loophole exposed by previous change The change causes more temporaries to be created at call sites for unaligned actual parameters, thus revealing that the machinery does not properly deal with unconstrained nominal subtypes for them. gcc/ada/ * gcc-interface/trans.cc (create_temporary): Deal with types whose size is self-referential by allocating the maximum size. --- diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc index caa0f56a34d..fadd6b483d5 100644 --- a/gcc/ada/gcc-interface/trans.cc +++ b/gcc/ada/gcc-interface/trans.cc @@ -4527,6 +4527,9 @@ storage_model_access_required_p (Node_Id gnat_node, Entity_Id *gnat_smo) static tree create_temporary (const char *prefix, tree type) { + if (CONTAINS_PLACEHOLDER_P (TYPE_SIZE (type))) + type = maybe_pad_type (type, max_size (TYPE_SIZE (type), true), 0, + Empty, false, false, true); tree gnu_temp = create_var_decl (create_tmp_var_name (prefix), NULL_TREE, type, NULL_TREE,