-
- Downloads
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.
Showing
- gcc/cp/constexpr.c 10 additions, 0 deletionsgcc/cp/constexpr.c
- gcc/cp/cp-tree.h 1 addition, 0 deletionsgcc/cp/cp-tree.h
- gcc/cp/semantics.c 68 additions, 14 deletionsgcc/cp/semantics.c
- gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated12.C 79 additions, 0 deletionsgcc/testsuite/g++.dg/cpp2a/is-constant-evaluated12.C
- gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated9.C 2 additions, 2 deletionsgcc/testsuite/g++.dg/cpp2a/is-constant-evaluated9.C
Loading
Please register or sign in to comment