Files
gcc-reflection/gcc/testsuite/g++.dg/cpp1y/constexpr-static1.C
Jason Merrill ef52976523 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.
2020-04-09 17:34:16 -04:00

11 lines
283 B
C

// PR c++/94523
// { dg-do compile { target c++14 } }
template <bool, typename a> using b = a;
struct d {
char ao;
template <typename ap> constexpr d(ap) : ao{} {}
};
template <int... au> struct e { static constexpr auto aw = d(au...); };
template <int c> b<c, d> ax(e<1>::aw);