diff options
| author | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-03-11 22:43:44 +0000 |
|---|---|---|
| committer | jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-03-11 22:43:44 +0000 |
| commit | 390bbb9b930b067e85c4c853ff3ba515a4a42cf3 (patch) | |
| tree | b9e1f312dd3771fa7604f4de2dfa9976baf38be7 | |
| parent | bed38986e1e572141e25a057a52b6af9eed83f24 (diff) | |
| download | ppe42-gcc-390bbb9b930b067e85c4c853ff3ba515a4a42cf3.tar.gz ppe42-gcc-390bbb9b930b067e85c4c853ff3ba515a4a42cf3.zip | |
PR c++/9820
* search.c (lookup_member): Fix handling of functions in a class
being defined.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@64193 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/search.c | 6 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/template/init2.C | 10 |
3 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 121c2aefbac..679cd1158c9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-03-11 Jason Merrill <jason@redhat.com> + + PR c++/9820 + * search.c (lookup_member): Fix handling of functions in a class + being defined. + 2003-03-11 Mark Mitchell <mark@codesourcery.com> PR c++/8700 diff --git a/gcc/cp/search.c b/gcc/cp/search.c index f97cb743d2d..3d23766d152 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -1212,11 +1212,15 @@ lookup_member (tree xbasetype, tree name, int protect, bool want_type) const char *errstr = 0; + /* Sanity check. */ + if (TREE_CODE (name) != IDENTIFIER_NODE) + abort (); + if (xbasetype == current_class_type && TYPE_BEING_DEFINED (xbasetype) && IDENTIFIER_CLASS_VALUE (name)) { tree field = IDENTIFIER_CLASS_VALUE (name); - if (TREE_CODE (field) != FUNCTION_DECL + if (! is_overloaded_fn (field) && ! (want_type && TREE_CODE (field) != TYPE_DECL)) /* We're in the scope of this class, and the value has already been looked up. Just return the cached value. */ diff --git a/gcc/testsuite/g++.dg/template/init2.C b/gcc/testsuite/g++.dg/template/init2.C new file mode 100644 index 00000000000..b81e4be94b7 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/init2.C @@ -0,0 +1,10 @@ +// PR c++/9820 + +template <typename T> struct X { + template<typename> static int test(...); + template<typename> static int test(int *); + + static const int i = sizeof(X<T>::template test<int>(0)); +}; + +template class X<int>; |

