https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91264
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Author: mpolacek Date: Mon Aug 19 13:59:13 2019 New Revision: 274671 URL: https://gcc.gnu.org/viewcvs?rev=274671&root=gcc&view=rev Log: PR c++/91264 - detect modifying const objects in constexpr. * constexpr.c (modifying_const_object_error): New function. (cxx_eval_call_expression): Set TREE_READONLY on a CONSTRUCTOR of a const-qualified object after it's been fully constructed. (modifying_const_object_p): New function. (cxx_eval_store_expression): Detect modifying a const object during constant expression evaluation. (cxx_eval_increment_expression): Use a better location when building up the store. (cxx_eval_constant_expression) <case DECL_EXPR>: Mark a constant object's constructor TREE_READONLY. * g++.dg/cpp1y/constexpr-tracking-const1.C: New test. * g++.dg/cpp1y/constexpr-tracking-const2.C: New test. * g++.dg/cpp1y/constexpr-tracking-const3.C: New test. * g++.dg/cpp1y/constexpr-tracking-const4.C: New test. * g++.dg/cpp1y/constexpr-tracking-const5.C: New test. * g++.dg/cpp1y/constexpr-tracking-const6.C: New test. * g++.dg/cpp1y/constexpr-tracking-const7.C: New test. * g++.dg/cpp1y/constexpr-tracking-const8.C: New test. * g++.dg/cpp1y/constexpr-tracking-const9.C: New test. * g++.dg/cpp1y/constexpr-tracking-const10.C: New test. * g++.dg/cpp1y/constexpr-tracking-const11.C: New test. * g++.dg/cpp1y/constexpr-tracking-const12.C: New test. * g++.dg/cpp1y/constexpr-tracking-const13.C: New test. * g++.dg/cpp1y/constexpr-tracking-const14.C: New test. Added: trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const1.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const10.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const11.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const12.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const13.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const14.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const2.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const3.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const4.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const5.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const6.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const7.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const8.C trunk/gcc/testsuite/g++.dg/cpp1y/constexpr-tracking-const9.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/constexpr.c trunk/gcc/testsuite/ChangeLog