From: Mark Mitchell Date: Thu, 25 Mar 1999 13:28:41 +0000 (+0000) Subject: * pt.c (tsubst_decl): Tsubst into DECL_BEFRIENDING_CLASSES. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cf38f48a33db6760662fb12716f87b3e3a9ac732;p=gcc.git * pt.c (tsubst_decl): Tsubst into DECL_BEFRIENDING_CLASSES. From-SVN: r25982 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6ed08ef205f..b6bff825ff7 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +1999-03-25 Mark Mitchell + + * pt.c (tsubst_decl): Tsubst into DECL_BEFRIENDING_CLASSES. + 1999-03-25 Nathan Sidwell * decl.c (init_decl_processing): Add `signed' type as a synonym diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f7372dd42e1..812cf94c4f4 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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 index 00000000000..7840629e588 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/friend40.C @@ -0,0 +1,11 @@ +// Build don't link: +// Origin: Jason Merrill + +template struct A +{ + friend void f (); +}; + +A a; +A b; +