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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #60376|0                           |1
        is obsolete|                            |

--- Comment #22 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 60377
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=60377&action=edit
gcc15-pr86769.patch

Full so far untested patch.  Note the constexpr-86769.C testcase FAILs with
clang++ and MSVC:
<source>:21:16: error: static assertion expression is not an integral constant
expression
   21 | static_assert (foo () == 136);
      |                ^~~~~~~~~~~~~
<source>:6:28: note: allocation performed here was not deallocated
    6 |   constexpr A (int x) : a (new int (x)) {}
      |                            ^
<source>:36:16: error: static assertion expression is not an integral constant
expression
   36 | static_assert (bar () == 120);
      |                ^~~~~~~~~~~~~
<source>:6:28: note: allocation performed here was not deallocated
    6 |   constexpr A (int x) : a (new int (x)) {}
      |                            ^
and
<source>(21): error C2131: expression did not evaluate to a constant
<source>(6): note: failure was caused by allocated storage not being
deallocated
<source>(36): error C2131: expression did not evaluate to a constant
<source>(6): note: failure was caused by allocated storage not being
deallocated
but that seems to me like a bug in both compilers.  If I remove all the
constexpr keywords and just evaluate it outside of compile time evaluation,
then the number of A ctors and dtors is the same and everything that has been
allocated is deallocated, valgrind is happy about those too.

Reply via email to