[Bug c++/100995] Extend std::is_constant_evaluated in if warning
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jun 11 02:32:40 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100995
--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:
https://gcc.gnu.org/g:26dbe85a3781af913639b17bc966f4a0b8209f3b
commit r12-1375-g26dbe85a3781af913639b17bc966f4a0b8209f3b
Author: Marek Polacek <polacek@redhat.com>
Date: Wed Jun 9 15:18:39 2021 -0400
c++: Extend std::is_constant_evaluated in if warning [PR100995]
Jakub pointed me at
<http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1938r3.html#compiler-warnings>
which shows that our existing warning could be extended to handle more
cases. This patch implements that.
A minor annoyance was handling macros, in libstdc++ we have
reference operator[](size_type __pos) {
__glibcxx_assert(__pos <= size());
...
}
wherein __glibcxx_assert expands to
if (__builtin_is_constant_evaluated() && !bool(__pos <= size())
...
but I'm of a mind to not warn on that.
Once consteval if makes it in, we should tweak this warning one more
time.
PR c++/100995
gcc/cp/ChangeLog:
* constexpr.c (maybe_constexpr_fn): New.
* cp-tree.h (maybe_constexpr_fn): Declare.
* semantics.c (find_std_constant_evaluated_r): New.
(maybe_warn_for_constant_evaluated): New.
(finish_if_stmt_cond): Call it.
gcc/testsuite/ChangeLog:
* g++.dg/cpp2a/is-constant-evaluated9.C: Add dg-warning.
* g++.dg/cpp2a/is-constant-evaluated12.C: New test.
More information about the Gcc-bugs
mailing list