From 55715096b51c2cb7e9a9cd03bd562301b7867051 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Thu, 18 Aug 2011 06:44:22 +0000 Subject: PR c++/45625 - Template parm name doesn't hide outer class scope's member name gcc/cp/ * pt.c (parameter_of_template_p): Handle comparison with DECLs of template parameters as created by process_template_parm. gcc/testsuite/ * g++.dg/lookup/hidden-var1.C: New test case. From-SVN: r177846 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 9 +++++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/lookup/hidden-var1.C | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lookup/hidden-var1.C (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4d6c353..f95040f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-08-18 Dodji Seketeli + + PR c++/45625 + * pt.c (parameter_of_template_p): Handle comparison with DECLs of + template parameters as created by process_template_parm. + 2011-08-16 Jason Merrill PR c++/50086 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 9ab110a..ed4fe72 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -7890,8 +7890,13 @@ parameter_of_template_p (tree parm, tree templ) parms = INNERMOST_TEMPLATE_PARMS (parms); for (i = 0; i < TREE_VEC_LENGTH (parms); ++i) - if (parm == TREE_VALUE (TREE_VEC_ELT (parms, i))) - return true; + { + tree p = TREE_VALUE (TREE_VEC_ELT (parms, i)); + if (parm == p + || (DECL_INITIAL (parm) + && DECL_INITIAL (parm) == DECL_INITIAL (p))) + return true; + } return false; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9440066..1bcb031 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-08-18 Dodji Seketeli + + PR c++/45625 + * g++.dg/lookup/hidden-var1.C: New test case. + 2011-08-17 Tobias Burnus PR fortran/31461 diff --git a/gcc/testsuite/g++.dg/lookup/hidden-var1.C b/gcc/testsuite/g++.dg/lookup/hidden-var1.C new file mode 100644 index 0000000..6be32b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/hidden-var1.C @@ -0,0 +1,19 @@ +// Origin PR c++/45625 +// { dg-do compile } + +struct Outer +{ + static const int value = 1 ; + + template< int value > + struct Inner + { + static const int* + get_value() + { + return &value ;// { dg-error "lvalue required" } + } + }; +}; + +template class Outer::Inner<2>; -- cgit v1.1