public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "jakub at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/114426] [14 regression] ICE when building log4cxx on arm (cxx_eval_call_expression, at cp/constexpr.cc:3242) since r14-6507
Date: Fri, 22 Mar 2024 15:50:17 +0000	[thread overview]
Message-ID: <bug-114426-4-9E3d9qgIYm@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-114426-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114426

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
It is indeed the assert added in that patch.
When cp_fold_function is called on the _ZN12ConfiguratorD0Ev body which
contains
Configurator::~Configurator(this); call
Now, maybe_constant_value is called on this in:
        /* Invoke maybe_constant_value for functions declared
           constexpr and not called with AGGR_INIT_EXPRs.
           TODO:
           Do constexpr expansion of expressions where the call itself is not
           constant, but the call followed by an INDIRECT_REF is.  */
        if (callee && DECL_DECLARED_CONSTEXPR_P (callee)
            && !flag_no_inline)
          {
            mce_value manifestly_const_eval = mce_unknown;
            if (flags & ff_mce_false)
              /* Allow folding __builtin_is_constant_evaluated to false during
                 constexpr evaluation of this call.  */
              manifestly_const_eval = mce_false;
            r = maybe_constant_value (x, /*decl=*/NULL_TREE,
                                      manifestly_const_eval);
          }
also on targets other than arm, but except on arm the maybe_constant_value ->
cxx_eval_outermost_constant_expr call returns very quickly, because the call
has VOID_TYPE_P and constexpr_dtor is false and the dtor isn't
DECL_IMMEDIATE_FUNCTION_P,
so it
          /* Calls to immediate functions returning void need to be
             evaluated.  */
          tree fndecl = cp_get_callee_fndecl_nofold (t);
          if (fndecl == NULL_TREE || !DECL_IMMEDIATE_FUNCTION_P (fndecl))
            return t;
The difference on arm is that the CALL_EXPR doesn't have VOID_TYPE_P type, but
pointer to the class, so it evaluates it and triggers the assertion.

Now, if all we want to do is get the same behavior on arm as on other targets,
perhaps
we could avoid doing that maybe_constant_value in cp_fold if DECL_DESTRUCTOR_P
(callee) or perhaps even DECL_CONSTRUCTOR_P (callee).

  parent reply	other threads:[~2024-03-22 15:50 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-22  5:11 [Bug c++/114426] New: [14 regression] ICE when building log4cxx on arm (cxx_eval_call_expression, at cp/constexpr.cc:3242) sjames at gcc dot gnu.org
2024-03-22  5:12 ` [Bug c++/114426] " sjames at gcc dot gnu.org
2024-03-22  5:13 ` sjames at gcc dot gnu.org
2024-03-22  5:14 ` sjames at gcc dot gnu.org
2024-03-22  6:51 ` rguenth at gcc dot gnu.org
2024-03-22  7:26 ` pinskia at gcc dot gnu.org
2024-03-22  8:01 ` sjames at gcc dot gnu.org
2024-03-22 12:36 ` law at gcc dot gnu.org
2024-03-22 15:11 ` [Bug c++/114426] [14 regression] ICE when building log4cxx on arm (cxx_eval_call_expression, at cp/constexpr.cc:3242) since r14-6507 jakub at gcc dot gnu.org
2024-03-22 15:50 ` jakub at gcc dot gnu.org [this message]
2024-03-22 15:52 ` jakub at gcc dot gnu.org
2024-03-23  8:06 ` jakub at gcc dot gnu.org
2024-04-10  8:02 ` rguenth at gcc dot gnu.org
2024-04-12  9:59 ` jakub at gcc dot gnu.org
2024-04-12 17:58 ` cvs-commit at gcc dot gnu.org
2024-04-12 17:58 ` jakub at gcc dot gnu.org

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=bug-114426-4-9E3d9qgIYm@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@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: link
Be 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).