https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87152
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Author: mpolacek Date: Fri Sep 7 14:12:48 2018 New Revision: 264158 URL: https://gcc.gnu.org/viewcvs?rev=264158&root=gcc&view=rev Log: PR c++/87152 - range-based for loops with initializer broken in templates. * constexpr.c (potential_constant_expression_1) <case RANGE_FOR_STMT>: Recur into RANGE_FOR_INIT_STMT. * cp-tree.def: Add RANGE_FOR_INIT_STMT to RANGE_FOR_STMT. * cp-tree.h (RANGE_FOR_INIT_STMT): Define. * dump.c (cp_dump_tree) <case RANGE_FOR_STMT>: Also dump RANGE_FOR_INIT_STMT. * pt.c (tsubst_expr) <case RANGE_FOR_STMT>: Recur into RANGE_FOR_INIT_STMT. * semantics.c (begin_range_for_stmt): Adjust call to build_stmt. Do put the init statement in RANGE_FOR_INIT_STMT. (finish_range_for_decl): Pop it for templates. * g++.dg/cpp2a/range-for11.C: New test. * g++.dg/cpp2a/range-for12.C: New test. * g++.dg/cpp2a/range-for13.C: New test. * g++.dg/cpp2a/range-for14.C: New test. * g++.dg/cpp2a/range-for15.C: New test. * g++.dg/cpp2a/range-for16.C: New test. * g++.dg/cpp2a/range-for17.C: New test. * g++.dg/cpp2a/range-for18.C: New test. * g++.dg/parse/error61.C (foo): Adjust dg-error. Added: trunk/gcc/testsuite/g++.dg/cpp2a/range-for11.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for12.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for13.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for14.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for15.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for16.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for17.C trunk/gcc/testsuite/g++.dg/cpp2a/range-for18.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/constexpr.c trunk/gcc/cp/cp-tree.def trunk/gcc/cp/cp-tree.h trunk/gcc/cp/dump.c trunk/gcc/cp/pt.c trunk/gcc/cp/semantics.c trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/g++.dg/parse/error61.C