aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
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>;