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.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/friend7.C33
4 files changed, 45 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5f2a0b3..d9f06b5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2002-06-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/6695
+ * pt.c (tsubst_friend_class): Substitute into the context of the
+ friend before using it.
+
2002-06-26 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (xref_tag): Change prototype.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index cdc1aa0..46de8da 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -4836,7 +4836,7 @@ tsubst_friend_class (friend_tmpl, args)
if (TREE_CODE (context) == NAMESPACE_DECL)
push_nested_namespace (context);
else
- push_nested_class (context, 2);
+ push_nested_class (tsubst (context, args, tf_none, NULL_TREE), 2);
}
/* First, we look for a class template. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 55d809b..ed51574 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2002-06-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/6695
+ * g++.dg/template/friend7.C: New file.
+
2002-06-27 Aldy Hernandez <aldyh@redhat.com>
* gcc.c-torture/execute/string-opt-8.c (strncmp): Fix typo in
diff --git a/gcc/testsuite/g++.dg/template/friend7.C b/gcc/testsuite/g++.dg/template/friend7.C
new file mode 100644
index 0000000..a954f89
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/friend7.C
@@ -0,0 +1,33 @@
+// { dg-do compile }
+
+template <typename V>
+struct b
+{
+ template <typename T>
+ class a
+ {
+ template <typename>
+ friend class a;
+
+ T t_;
+
+ public:
+ a() {}
+ a(a<T *> const &);
+ };
+};
+
+template <typename V>
+template <typename T>
+b<V>::a<T>::a(a<T *> const &rhs): t_(*rhs.t_)
+{}
+
+
+int
+f ()
+{
+ b<void *>::a<char *> q;
+ b<void *>::a<char> w(q);
+
+ return 0;
+}