c++: constexpr static data member instantiation [PR94523]
authorJason Merrill <jason@redhat.com>
Thu, 9 Apr 2020 03:59:30 +0000 (23:59 -0400)
committerJason Merrill <jason@redhat.com>
Thu, 9 Apr 2020 21:34:16 +0000 (17:34 -0400)
commitef529765234bea7893bd56f3ab3a2da7695f6b21
tree8c1d3602bc7bd39287c7329c91ac1bc9790146cb
parent3fd1c229ad10fda68318882329568f400a38fb6d
c++: constexpr static data member instantiation [PR94523]

Here due to my recent change to store_init_value we were expanding the
initializer of aw knowing that we were initializing aw.  When
cxx_eval_call_expression finished the constructor, it wanted to look up the
value of aw to set TREE_READONLY on it, but we haven't set DECL_INITIAL yet,
so decl_constant_value tried to instantiate the initializer again.  And
infinite recursion.  Stopped by optimizing the case of asking for the value
of ctx->object, which is ctx->value.  It also would have worked to look in
the values hash table, so let's move that up before decl_constant_value as
well.

gcc/cp/ChangeLog
2020-04-09  Jason Merrill  <jason@redhat.com>

PR c++/94523
* constexpr.c (cxx_eval_constant_expression) [VAR_DECL]: Look at
ctx->object and ctx->global->values first.
gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/testsuite/g++.dg/cpp1y/constexpr-static1.C [new file with mode: 0644]