* pt.c (tsubst_decl): Tsubst into DECL_BEFRIENDING_CLASSES.
authorMark Mitchell <mark@codesourcery.com>
Thu, 25 Mar 1999 13:28:41 +0000 (13:28 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Thu, 25 Mar 1999 13:28:41 +0000 (13:28 +0000)
From-SVN: r25982

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.old-deja/g++.pt/friend40.C [new file with mode: 0644]

index 6ed08ef..b6bff82 100644 (file)
@@ -1,3 +1,7 @@
+1999-03-25  Mark Mitchell  <mark@codesourcery.com>
+
+       * pt.c (tsubst_decl): Tsubst into DECL_BEFRIENDING_CLASSES.
+
 1999-03-25  Nathan Sidwell  <nathan@acm.org>
 
        * decl.c (init_decl_processing): Add `signed' type as a synonym
index f7372dd..812cf94 100644 (file)
@@ -5470,6 +5470,7 @@ tsubst_decl (t, args, type, in_decl)
       {
        tree ctx;
        tree argvec = NULL_TREE;
+       tree *friends;
        tree gen_tmpl;
        int member;
        int args_depth;
@@ -5669,6 +5670,17 @@ tsubst_decl (t, args, type, in_decl)
              SET_IDENTIFIER_GLOBAL_VALUE (DECL_ASSEMBLER_NAME (r), r);
          }
 
+       /* Copy the list of befriending classes.  */
+       for (friends = &DECL_BEFRIENDING_CLASSES (r);
+            *friends;
+            friends = &TREE_CHAIN (*friends)) 
+         {
+           *friends = copy_node (*friends);
+           TREE_VALUE (*friends) = tsubst (TREE_VALUE (*friends),
+                                           args, /*complain=*/1, 
+                                           in_decl);
+         }
+
        if (DECL_CONSTRUCTOR_P (r))
          {
            maybe_retrofit_in_chrg (r);
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/friend40.C b/gcc/testsuite/g++.old-deja/g++.pt/friend40.C
new file mode 100644 (file)
index 0000000..7840629
--- /dev/null
@@ -0,0 +1,11 @@
+// Build don't link:
+// Origin: Jason Merrill <jason@cygnus.com>
+
+template<class T> struct A
+{
+  friend void f ();
+};
+
+A<short> a;
+A<int> b;
+