mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
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.
11 lines
283 B
C
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);
|