]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: Improve error recovery with constexpr [PR92193]
authorJason Merrill <jason@redhat.com>
Mon, 30 Aug 2021 22:42:05 +0000 (18:42 -0400)
committerJason Merrill <jason@redhat.com>
Tue, 31 Aug 2021 16:17:19 +0000 (12:17 -0400)
commit9aeadd8c319d5d940fa4dc91a393fc2959d27719
tree27b1c3b13691e8266d10fd240ea7e28d423dbe68
parent18f0e57b9a2f1b108831fcfb25cbcc4e2de65e8e
c++: Improve error recovery with constexpr [PR92193]

The compiler tries to limit error cascades in limit_bad_template_recursion
by avoiding triggering a new instantiation from one that has caused errors.
We were exempting constexpr functions from this because they can be needed
for constant evaluation, but as more and more functions get marked
constexpr, this becomes an over-broad category.  So as suggested on IRC,
this patch only exempts functions that are needed for mandatory constant
evaluation.

As noted in the comment, this flag doesn't particularly need to use a bit in
the FUNCTION_DECL, but there were still some free.

PR c++/92193

gcc/cp/ChangeLog:

* cp-tree.h (FNDECL_MANIFESTLY_CONST_EVALUATED): New.
* constexpr.c (cxx_eval_call_expression): Set it.
* pt.c (neglectable_inst_p): Check it.

gcc/testsuite/ChangeLog:

* g++.dg/diagnostic/static_assert4.C: New test.
gcc/cp/constexpr.c
gcc/cp/cp-tree.h
gcc/cp/pt.c
gcc/testsuite/g++.dg/diagnostic/static_assert4.C [new file with mode: 0644]