public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Alexandre Oliva <aoliva@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/aoliva/heads/hard12)] sync up new type indices for body adjustments Date: Fri, 6 May 2022 08:38:19 +0000 (GMT) [thread overview] Message-ID: <20220506083819.DFCBC3856DFF@sourceware.org> (raw) https://gcc.gnu.org/g:68ab3c7d4267671172030b12f2ca3341553cb4de commit 68ab3c7d4267671172030b12f2ca3341553cb4de Author: Alexandre Oliva <oliva@adacore.com> Date: Fri May 6 05:35:02 2022 -0300 sync up new type indices for body adjustments The logic in fill_vector_of_new_param_types may skip some parameters when pushing into m_new_types, but common_initialization doesn't take that into account, and may end up attempting to access the vector past its end when IPA_PARAM_OP_(NEW|SPLIT) operands appear after skipped _COPY ones. This patch adjusts the consumer logic to match the indexing in the producer. It came up in libstdc++-v3's testsuite, in std/ranges/adaptors/filter.cc, but only with wrappers introduced by a pass I'm working on. The _NEW parameters were reference-typed replacements for some by-value ones in my function-wrapping logic, and other IPA transformations cause plenty of unused/irrelevant arguments to be dropped for certain calls. for gcc/ChangeLog * ipa-param-manipulation.c (ipa_param_body_adjustments::common_initialization): Adjust m_new_types indexing to match producer. Diff: --- gcc/ipa-param-manipulation.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc index 5c2d1eb88da..187ff37e95b 100644 --- a/gcc/ipa-param-manipulation.cc +++ b/gcc/ipa-param-manipulation.cc @@ -1350,11 +1350,17 @@ ipa_param_body_adjustments::common_initialization (tree old_fndecl, corresponding m_id->dst_node->clone.performed_splits entries. */ m_new_decls.reserve_exact (adj_len); - for (unsigned i = 0; i < adj_len ; i++) + for (unsigned i = 0, nti = 0; i < adj_len ; i++, nti++) { ipa_adjusted_param *apm = &(*m_adj_params)[i]; unsigned prev_index = apm->prev_clone_index; tree new_parm; + if (apm->op == IPA_PARAM_OP_COPY + && prev_index >= otypes.length ()) + /* Keep nti in sync with the m_new_types indices used in + fill_vector_of_new_param_types, for any non-IPA_PARAM_OP_COPY + parms. */ + nti--; if (apm->op == IPA_PARAM_OP_COPY || apm->prev_clone_adjustment) { @@ -1365,7 +1371,7 @@ ipa_param_body_adjustments::common_initialization (tree old_fndecl, else if (apm->op == IPA_PARAM_OP_NEW || apm->op == IPA_PARAM_OP_SPLIT) { - tree new_type = m_new_types[i]; + tree new_type = m_new_types[nti]; gcc_checking_assert (new_type); new_parm = build_decl (UNKNOWN_LOCATION, PARM_DECL, NULL_TREE, new_type);
reply other threads:[~2022-05-06 8:38 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220506083819.DFCBC3856DFF@sourceware.org \ --to=aoliva@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).