C++ PATCH for c++/84421, wrong error with type-dependent constexpr if
Jason Merrill
jason@redhat.com
Fri Feb 16 16:44:00 GMT 2018
We can't judge whether the condition is a constant-expression until
we've converted it to bool; if it's type-dependent, let's leave that
checking for later.
Tested x86_64-pc-linux-gnu, applying to trunk.
-------------- next part --------------
commit b1fa979536b793b6bb1b9262e65ba6c753d5802b
Author: Jason Merrill <jason@redhat.com>
Date: Fri Feb 16 10:53:53 2018 -0500
PR c++/84421 - type-dependent if constexpr
* semantics.c (finish_if_stmt_cond): Check
type_dependent_expression_p.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index f0cee68e46f..35569d0cb0d 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -731,6 +731,7 @@ finish_if_stmt_cond (tree cond, tree if_stmt)
{
cond = maybe_convert_cond (cond);
if (IF_STMT_CONSTEXPR_P (if_stmt)
+ && !type_dependent_expression_p (cond)
&& require_constant_expression (cond)
&& !value_dependent_expression_p (cond))
{
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C
new file mode 100644
index 00000000000..f6cc39a0c2f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-if14.C
@@ -0,0 +1,14 @@
+// PR c++/84421
+// { dg-options -std=c++17 }
+
+struct A{
+ constexpr operator bool() const { return true; }
+};
+
+int main(){
+ auto f = [](auto v){
+ if constexpr(v){}
+ };
+ A a;
+ f(a);
+}
More information about the Gcc-patches
mailing list