[gcc(refs/users/rguenth/heads/slp-reorg)] c++: Fix template parm with dependent type in concepts.

Richard Biener rguenth@gcc.gnu.org
Wed Mar 25 14:20:33 GMT 2020


https://gcc.gnu.org/g:5c1617418432466f3f91d282d356bdec91e9dbd2

commit 5c1617418432466f3f91d282d356bdec91e9dbd2
Author: Jason Merrill <jason@redhat.com>
Date:   Tue Mar 24 18:25:17 2020 -0400

    c++: Fix template parm with dependent type in concepts.
    
    While looking at PR94186 I also noticed this regression; if a non-type
    template parameter uses a type parameter in its type, we need to map both
    template parameters.
    
    gcc/cp/ChangeLog
    2020-03-24  Jason Merrill  <jason@redhat.com>
    
            * pt.c (any_template_parm_r): Look into the type of a non-type
            template parm.

Diff:
---
 gcc/cp/ChangeLog                               |  5 +++++
 gcc/cp/pt.c                                    |  1 +
 gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C | 11 +++++++++++
 3 files changed, 17 insertions(+)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7ae4128a3a8..a4b132d6961 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2020-03-24  Jason Merrill  <jason@redhat.com>
+
+	* pt.c (any_template_parm_r): Look into the type of a non-type
+	template parm.
+
 2020-03-24  Jason Merrill  <jason@redhat.com>
 
 	* cp-tree.h (cp_expr): When constructing from an expr and a
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 03a8dfbd37c..3c96eeca191 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -10431,6 +10431,7 @@ any_template_parm_r (tree t, void *data)
       WALK_SUBTREE (TREE_OPERAND (t, 1));
       break;
 
+    case TEMPLATE_PARM_INDEX:
     case PARM_DECL:
       /* A parameter or constraint variable may also depend on a template
 	 parameter without explicitly naming it.  */
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C b/gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C
new file mode 100644
index 00000000000..ebede46b368
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C
@@ -0,0 +1,11 @@
+// { dg-do compile { target concepts } }
+
+template<class X, X x>
+concept C = requires {
+    requires x;			// { dg-error "bool" }
+  };
+
+int main() {
+  C<int, 0>;
+  return 0;
+}


More information about the Gcc-cvs mailing list