mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-21 08:03:41 +08:00
decl.c (lookup_name_real): Don't forget the TYPENAME_TYPE we're looking inside.
* decl.c (lookup_name_real): Don't forget the TYPENAME_TYPE we're looking inside. From-SVN: r35650
This commit is contained in:
parent
058557c4d1
commit
e69c807271
@ -1,3 +1,8 @@
|
||||
2000-08-11 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl.c (lookup_name_real): Don't forget the TYPENAME_TYPE we're
|
||||
looking inside.
|
||||
|
||||
2000-08-11 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* cp-tree.h (resolve_scope_to_name): Remove unused prototype.
|
||||
@ -882,7 +887,7 @@ Wed Jul 26 15:05:51 CEST 2000 Marc Espie <espie@cvs.openbsd.org>
|
||||
* semantics.c (emit_associated_thunks): New function.
|
||||
(expand_body): Use it.
|
||||
* ir.texi: Adjust decriptions of thunks.
|
||||
|
||||
|
||||
2000-06-22 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* pt.c (tsubst_decl, case FUNCTION_DECL): Clear DECL_SAVED_TREE.
|
||||
|
@ -5898,6 +5898,13 @@ lookup_name_real (name, prefer_type, nonclass, namespaces_only)
|
||||
{
|
||||
val = lookup_member (type, name, 0, prefer_type);
|
||||
type_access_control (type, val);
|
||||
|
||||
/* Restore the containing TYPENAME_TYPE if we looked
|
||||
through it before. */
|
||||
if (got_scope && got_scope != type
|
||||
&& val && TREE_CODE (val) == TYPE_DECL
|
||||
&& TREE_CODE (TREE_TYPE (val)) == TYPENAME_TYPE)
|
||||
TYPE_CONTEXT (TREE_TYPE (val)) = got_scope;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
32
gcc/testsuite/g++.old-deja/g++.ext/typename1.C
Normal file
32
gcc/testsuite/g++.old-deja/g++.ext/typename1.C
Normal file
@ -0,0 +1,32 @@
|
||||
// Bug: g++ forgets about the instantiation of class1 when looking up
|
||||
// class11_value, and tries to look things up in class1<class2>.
|
||||
|
||||
// Special g++ Options:
|
||||
|
||||
template<class ItIsInt>
|
||||
struct class1 {
|
||||
struct class11 {
|
||||
typedef ItIsInt class11_value;
|
||||
};
|
||||
};
|
||||
|
||||
template<class ItIsClass2>
|
||||
struct class3 {
|
||||
int f();
|
||||
};
|
||||
|
||||
template<class ItIsClass2>
|
||||
int class3<ItIsClass2>::f()
|
||||
{
|
||||
return class1<typename ItIsClass2::class2_value>::class11::class11_value(10);
|
||||
}
|
||||
|
||||
struct class2 {
|
||||
typedef int class2_value;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
class3<class2> the_class3;
|
||||
the_class3.f();
|
||||
}
|
Loading…
Reference in New Issue
Block a user