Ping. On Thu, Oct 11, 2018 at 09:28:38PM -0400, Marek Polacek wrote: > Recently it came up that no test in the testsuite triggers the RANGE_FOR_STMT > case in potential_constant_expression_1. I came up with this valid test that > tickles that codepath. > > I can't use ({ }) instead of a lambda because the constexpr machinery doesn't > handle statement expressions; see default: in cxx_eval_constant_expression. > > Tested on x86_64-linux, ok for trunk? > > 2018-10-11 Marek Polacek <pola...@redhat.com> > > * g++.dg/cpp1z/constexpr-lambda22.C: New test, > > diff --git gcc/testsuite/g++.dg/cpp1z/constexpr-lambda22.C > gcc/testsuite/g++.dg/cpp1z/constexpr-lambda22.C > index e69de29bb2d..8bb473431a5 100644 > --- gcc/testsuite/g++.dg/cpp1z/constexpr-lambda22.C > +++ gcc/testsuite/g++.dg/cpp1z/constexpr-lambda22.C > @@ -0,0 +1,20 @@ > +// { dg-do compile } > +// { dg-options -std=c++17 } > + > +#define SA(X) static_assert((X),#X) > + > +template<typename> > +constexpr int > +foo () > +{ > + constexpr int a[] = { 1, 2, 3, 4, 5 }; > + int i = 0; > + auto j = [&] { > + for (auto x : a) > + i++; > + return i; > + }(); > + return j; > +} > + > +SA (foo<int>() == 5);
Marek