From: Jason Merrill Date: Tue, 24 Mar 2020 22:25:17 +0000 (-0400) Subject: c++: Fix template parm with dependent type in concepts. X-Git-Tag: upstream/12.2.0~17672 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5c1617418432466f3f91d282d356bdec91e9dbd2;p=platform%2Fupstream%2Fgcc.git 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. --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7ae4128..a4b132d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 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 location, call protected_set_expr_location. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 03a8dfb..3c96eec 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 0000000..ebede46 --- /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; +}