Re: C++ PATCH for c++/84684, wrong caching when evaluating a constexpr function

2018-03-07 Thread Jason Merrill
On Tue, Mar 6, 2018 at 3:48 PM, Marek Polacek wrote: > On Tue, Mar 06, 2018 at 03:39:36PM -0500, Jason Merrill wrote: >> On Tue, Mar 6, 2018 at 1:13 PM, Marek Polacek wrote: >> > But I'm also wondering about massage_init_elt. It has >> > tree t = fold_non_dependent_expr (init); >> > t = mayb

Re: C++ PATCH for c++/84684, wrong caching when evaluating a constexpr function

2018-03-06 Thread Marek Polacek
On Tue, Mar 06, 2018 at 03:39:36PM -0500, Jason Merrill wrote: > On Tue, Mar 6, 2018 at 1:13 PM, Marek Polacek wrote: > > But I'm also wondering about massage_init_elt. It has > > tree t = fold_non_dependent_expr (init); > > t = maybe_constant_init (t); > > but given that fold_non_dependent_e

Re: C++ PATCH for c++/84684, wrong caching when evaluating a constexpr function

2018-03-06 Thread Jason Merrill
On Tue, Mar 6, 2018 at 1:13 PM, Marek Polacek wrote: > In this testcase we have a constexpr function, value_to_char_helper. Its body > is >for (size_t i = 0u; i < alphabet_t::value_size; ++i) > value_to_char[i] = to_char(alphabet.assign_rank(i)); > > which is genericized to a LOOP_EXPR

C++ PATCH for c++/84684, wrong caching when evaluating a constexpr function

2018-03-06 Thread Marek Polacek
In this testcase we have a constexpr function, value_to_char_helper. Its body is for (size_t i = 0u; i < alphabet_t::value_size; ++i) value_to_char[i] = to_char(alphabet.assign_rank(i)); which is genericized to a LOOP_EXPR looking roughly like this: while (1) { if (i > 3)