aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDodji Seketeli <dodji@redhat.com>2011-08-18 06:44:22 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2011-08-18 08:44:22 +0200
commit55715096b51c2cb7e9a9cd03bd562301b7867051 (patch)
tree5ec23b85c1ce0fb11dd5f2aea800a2ffc8cb265e /gcc
parentc96012143a5cd5f589032a6e2ae9526e318cf9ea (diff)
downloadgcc-55715096b51c2cb7e9a9cd03bd562301b7867051.zip
gcc-55715096b51c2cb7e9a9cd03bd562301b7867051.tar.gz
gcc-55715096b51c2cb7e9a9cd03bd562301b7867051.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/lookup/hidden-var1.C19
4 files changed, 37 insertions, 2 deletions
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 <dodji@redhat.com>
+
+ 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 <jason@redhat.com>
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 <dodji@redhat.com>
+
+ PR c++/45625
+ * g++.dg/lookup/hidden-var1.C: New test case.
+
2011-08-17 Tobias Burnus <burnus@net-b.de>
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>;