From 7ff201d85fad11ba6365a5612124b75b385a97bd Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Tue, 8 Feb 2022 09:11:29 -0500 Subject: [PATCH] c++: satisfaction value of type const bool [PR104410] Here constant evaluation of the atomic constraint use_func_v sensibly yields an INTEGER_CST of type const bool, but the assert in satisfaction_value expects unqualified bool. So let's just relax the assert to accept cv-qualified bool. PR c++/104410 gcc/cp/ChangeLog: * constraint.cc (satisfaction_value): Relax assert to accept cv-qualified bool. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/concepts-pr104410.C: New test. --- gcc/cp/constraint.cc | 3 ++- gcc/testsuite/g++.dg/cpp2a/concepts-pr104410.C | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-pr104410.C diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc index b7b9439..12db7e5 100644 --- a/gcc/cp/constraint.cc +++ b/gcc/cp/constraint.cc @@ -2818,7 +2818,8 @@ satisfaction_value (tree t) return t; gcc_assert (TREE_CODE (t) == INTEGER_CST - && same_type_p (TREE_TYPE (t), boolean_type_node)); + && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (t), + boolean_type_node)); if (integer_zerop (t)) return boolean_false_node; else diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-pr104410.C b/gcc/testsuite/g++.dg/cpp2a/concepts-pr104410.C new file mode 100644 index 0000000..dac08e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-pr104410.C @@ -0,0 +1,6 @@ +// PR c++/104410 +// { dg-do compile { target c++20 } } + +template constexpr bool use_func_v{}; +template void f() requires use_func_v || true { } +template void f(); -- 2.7.4