diff options
| author | lerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-06 15:41:34 +0000 |
|---|---|---|
| committer | lerdsuwa <lerdsuwa@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-01-06 15:41:34 +0000 |
| commit | 615c38af421dbea2ab6c9968c471dc709ebfcdd7 (patch) | |
| tree | 77e633813ccdf70956ddfce2e7ebc2525e057e33 | |
| parent | 5fcd398b92ed05162366d253a3d8792617a5a957 (diff) | |
| download | ppe42-gcc-615c38af421dbea2ab6c9968c471dc709ebfcdd7.tar.gz ppe42-gcc-615c38af421dbea2ab6c9968c471dc709ebfcdd7.zip | |
PR c++/19258
* pt.c (push_access_scope): Handle friend defined in class.
(pop_access_scope): Likewise.
* g++.dg/lookup/friend6.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@92993 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/pt.c | 6 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/lookup/friend6.C | 15 |
4 files changed, 30 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fb98595db1f..628d046c835 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + PR c++/19258 + * pt.c (push_access_scope): Handle friend defined in class. + (pop_access_scope): Likewise. + 2005-01-06 Nathan Sidwell <nathan@codesourcery.com> PR c++/19270 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index e6f4b51098f..ad852c5a136 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -176,7 +176,9 @@ push_access_scope (tree t) gcc_assert (TREE_CODE (t) == FUNCTION_DECL || TREE_CODE (t) == VAR_DECL); - if (DECL_CLASS_SCOPE_P (t)) + if (DECL_FRIEND_CONTEXT (t)) + push_nested_class (DECL_FRIEND_CONTEXT (t)); + else if (DECL_CLASS_SCOPE_P (t)) push_nested_class (DECL_CONTEXT (t)); else push_to_top_level (); @@ -201,7 +203,7 @@ pop_access_scope (tree t) saved_access_scope = TREE_CHAIN (saved_access_scope); } - if (DECL_CLASS_SCOPE_P (t)) + if (DECL_FRIEND_CONTEXT (t) || DECL_CLASS_SCOPE_P (t)) pop_nested_class (); else pop_from_top_level (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 139d695f2ae..8ed16ad930f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + PR c++/19258 + * g++.dg/lookup/friend6.C: New test. + 2005-01-06 Nathan Sidwell <nathan@codesourcery.com> PR c++/19270 diff --git a/gcc/testsuite/g++.dg/lookup/friend6.C b/gcc/testsuite/g++.dg/lookup/friend6.C new file mode 100644 index 00000000000..e3dafb1d6b5 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/friend6.C @@ -0,0 +1,15 @@ +// { dg-do compile } + +// Origin: Matt Austern <austern@apple.com> + +// PR c++/19258: Wrong lookup scope for friend defined in class. + +class X { + template<class T> friend int ff(T*, int y=anX.x) { return y; } + int f() { return ff(&anX); } + + static X anX; + int x; +}; + +X dummy; |

