On 4/6/22 15:36, Alexandre Oliva wrote:

Please adjust your patch subject lines for the new guidelines adopted as part of the git transition:

https://gcc.gnu.org/contribute.html#patches

e.g. [PATCH] c++: tolerate cdtors returning this in constexpr [PRnnnnn]

On targets that return this from cdtors, cxx_eval_call_expression may
flag flowing off the end of a dtor.  That's preempted for ctors, and
avoided entirely when dtors return void, but when they return this,
the return value should be conceptually disregarded, without making
room for such internal ABI details to make a program ill-formed, as in
g++.dg/cpp2a/constexpr-dtor12.C on arm-eabi.

Is there a PR for this issue?

The patch looks fine, but why doesn't the implicit return 'this' on arm-eabi already make the result non-null?

Thanks,
Jason

Regstrapped on x86_64-linux-gnu, also verified the testcase fix on
arm-eabi.  Ok to install?


for  gcc/cp/ChangeLog

        * constexpr.cc (cxx_eval_call_expression): Disregard dtor
        result.
---
  gcc/cp/constexpr.cc |    3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index 9c40b0515747d..d8bc864ae6bcc 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -2889,7 +2889,8 @@ cxx_eval_call_expression (const constexpr_ctx *ctx, tree 
t,
          else
            {
              result = *ctx->global->values.get (res);
-             if (result == NULL_TREE && !*non_constant_p)
+             if (result == NULL_TREE && !*non_constant_p
+                 && !DECL_DESTRUCTOR_P (fun))
                {
                  if (!ctx->quiet)
                    error ("%<constexpr%> call flows off the end "


Reply via email to