re PR c++/87481 (Endless loop with optimisation in C++17)
authorJakub Jelinek <jakub@redhat.com>
Fri, 22 Mar 2019 14:40:59 +0000 (15:40 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 22 Mar 2019 14:40:59 +0000 (15:40 +0100)
commita15ffa22b5b541a385e509649dc39db59492bcdb
tree8606dad0f353d85630d41e4b1e4b709dce94fd2e
parent29e0246c68efd4b68f9593ff26b3c123fb05161d
re PR c++/87481 (Endless loop with optimisation in C++17)

PR c++/87481
* doc/invoke.texi (-fconstexpr-ops-limit=): Document.

* c.opt (-fconstexpr-ops-limit=): New option.

* constexpr.c (struct constexpr_ctx): Add constexpr_ops_count member.
(cxx_eval_constant_expression): When not skipping, not constant class
or location wrapper, increment *ctx->constexpr_ops_count and if it is
above constexpr_loop_nest_limit, diagnose failure.
(cxx_eval_outermost_constant_expr): Add constexpr_ops_count and
initialize ctx.constexpr_ops_count to its address.
(is_sub_constant_expr): Likewise.

* g++.dg/cpp1y/constexpr-87481.C: New test.

From-SVN: r269874
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/cp/ChangeLog
gcc/cp/constexpr.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp1y/constexpr-87481.C [new file with mode: 0644]