aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/decl.c
diff options
context:
space:
mode:
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>2003-03-09 14:30:18 +0000
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>2003-03-09 14:30:18 +0000
commitca9e13823c9e8cf547dbcd98416e1b4dfcced5fa (patch)
tree023dc3d8583203ef9854baf4a70e196dfabefbe6 /gcc/cp/decl.c
parentc5979bc6a244692449d277e24083da7849f78bd7 (diff)
downloadgcc-ca9e13823c9e8cf547dbcd98416e1b4dfcced5fa.zip
gcc-ca9e13823c9e8cf547dbcd98416e1b4dfcced5fa.tar.gz
gcc-ca9e13823c9e8cf547dbcd98416e1b4dfcced5fa.tar.bz2
re PR c++/9970 (previously declared inline friend can't access members)
PR c++/9970 * decl.c (duplicate_decls): Only copy DECL_THUNKS for virtual functions. * g++.dg/lookup/friend1.C: New test. From-SVN: r64029
Diffstat (limited to 'gcc/cp/decl.c')
-rw-r--r--gcc/cp/decl.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index fb36313..639c5d0 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3554,7 +3554,10 @@ duplicate_decls (tree newdecl, tree olddecl)
DECL_BEFRIENDING_CLASSES (newdecl)
= chainon (DECL_BEFRIENDING_CLASSES (newdecl),
DECL_BEFRIENDING_CLASSES (olddecl));
- DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
+ /* DECL_THUNKS is only valid for virtual functions,
+ otherwise it is a DECL_FRIEND_CONTEXT. */
+ if (DECL_VIRTUAL_P (newdecl))
+ DECL_THUNKS (newdecl) = DECL_THUNKS (olddecl);
}
}