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

Reply via email to