]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/45625 - Template parm name doesn't hide outer class scope's member name
authorDodji Seketeli <dodji@redhat.com>
Thu, 18 Aug 2011 06:44:22 +0000 (06:44 +0000)
committerDodji Seketeli <dodji@gcc.gnu.org>
Thu, 18 Aug 2011 06:44:22 +0000 (08:44 +0200)
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
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lookup/hidden-var1.C [new file with mode: 0644]

index 4d6c353a178ca49f50d336d845ec2c6668d91dac..f95040f86a101cb34b0a5b46286a1f02eeaf0250 100644 (file)
@@ -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
index 9ab110aa225d3f2c96699d69a8b7d86e6a799c9c..ed4fe726c205aa22673407a9b8c379fc8ee511c6 100644 (file)
@@ -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;
 }
index 9440066fc1b9abb5f2ed1f55917627abc4c5ef2d..1bcb0313e4c81d3da51969eaeb96ba2c655ae99b 100644 (file)
@@ -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 (file)
index 0000000..6be32b5
--- /dev/null
@@ -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>;