]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: Tolerate cdtors returning this in constexpr
authorAlexandre Oliva <oliva@adacore.com>
Mon, 11 Apr 2022 15:11:09 +0000 (12:11 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Mon, 11 Apr 2022 15:11:09 +0000 (12:11 -0300)
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.

for  gcc/cp/ChangeLog

* constexpr.cc (cxx_eval_call_expression): Disregard dtor
result.

gcc/cp/constexpr.cc

index db78b4a6545c0e139047759feb232fd0bb78cd63..1ce1842430d03ec6297ef7afaeb4afaf83657e51 100644 (file)
@@ -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 "