From 5c1617418432466f3f91d282d356bdec91e9dbd2 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 24 Mar 2020 18:25:17 -0400 Subject: [PATCH] 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 * pt.c (any_template_parm_r): Look into the type of a non-type template parm. --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 1 + gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C | 11 +++++++++++ 3 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C 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 + + * pt.c (any_template_parm_r): Look into the type of a non-type + template parm. + 2020-03-24 Jason Merrill * 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 +concept C = requires { + requires x; // { dg-error "bool" } + }; + +int main() { + C; + return 0; +} -- 2.30.2