diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2000-09-06 09:21:35 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2000-09-06 09:21:35 +0000 |
commit | 46e2747c7175301068408521e2d132feb6e2ddb5 (patch) | |
tree | f6538c31bbabd5cc99c43a8e819a92e724d50ab3 /gcc | |
parent | 630c79be17246fec9843b3c2b060bc4bddc115c6 (diff) | |
download | gcc-46e2747c7175301068408521e2d132feb6e2ddb5.zip gcc-46e2747c7175301068408521e2d132feb6e2ddb5.tar.gz gcc-46e2747c7175301068408521e2d132feb6e2ddb5.tar.bz2 |
error.c (dump_typename): New function, broken out of ...
* error.c (dump_typename): New function, broken out of ...
(dump_type): ... here. Use it.
* typeck.c (same_type_p): Use cp_tree_equal for TYPENAME_TYPE.
From-SVN: r36193
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/error.c | 23 | ||||
-rw-r--r-- | gcc/cp/typeck.c | 5 |
3 files changed, 29 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e5c11ef..ecd845b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,11 @@ 2000-09-06 Nathan Sidwell <nathan@codesourcery.com> + * error.c (dump_typename): New function, broken out of ... + (dump_type): ... here. Use it. + * typeck.c (same_type_p): Use cp_tree_equal for TYPENAME_TYPE. + +2000-09-06 Nathan Sidwell <nathan@codesourcery.com> + * init.c (build_offset_ref): Deal with namespace scoped TEMPLATE_ID_EXPRs. diff --git a/gcc/cp/error.c b/gcc/cp/error.c index c3bb284..6d821a2 100644 --- a/gcc/cp/error.c +++ b/gcc/cp/error.c @@ -87,6 +87,7 @@ static const char *parm_to_string PARAMS ((int, int)); static const char *type_to_string PARAMS ((tree, int)); static void dump_type PARAMS ((tree, enum tree_string_flags)); +static void dump_typename PARAMS ((tree, enum tree_string_flags)); static void dump_simple_decl PARAMS ((tree, tree, enum tree_string_flags)); static void dump_decl PARAMS ((tree, enum tree_string_flags)); static void dump_template_decl PARAMS ((tree, enum tree_string_flags)); @@ -503,9 +504,7 @@ dump_type (t, flags) } case TYPENAME_TYPE: OB_PUTS ("typename "); - dump_type (TYPE_CONTEXT (t), flags & ~TS_AGGR_TAGS); - OB_PUTS ("::"); - dump_decl (TYPENAME_TYPE_FULLNAME (t), flags); + dump_typename (t, flags); break; case TYPEOF_TYPE: @@ -525,6 +524,24 @@ dump_type (t, flags) } } +/* Dump a TYPENAME_TYPE. We need to notice when the context is itself + a TYPENAME_TYPE. */ + +static void +dump_typename (t, flags) + tree t; + enum tree_string_flags flags; +{ + tree ctx = TYPE_CONTEXT (t); + + if (TREE_CODE (ctx) == TYPENAME_TYPE) + dump_typename (ctx, flags); + else + dump_type (ctx, flags & ~TS_AGGR_TAGS); + OB_PUTS ("::"); + dump_decl (TYPENAME_TYPE_FULLNAME (t), flags); +} + /* Return the name of the supplied aggregate, or enumeral type. */ static const char * diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 823aaec..bff019d 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1096,8 +1096,9 @@ comptypes (t1, t2, strict) && TEMPLATE_TYPE_LEVEL (t1) == TEMPLATE_TYPE_LEVEL (t2); case TYPENAME_TYPE: - if (TYPE_IDENTIFIER (t1) != TYPE_IDENTIFIER (t2)) - return 0; + if (cp_tree_equal (TYPENAME_TYPE_FULLNAME (t1), + TYPENAME_TYPE_FULLNAME (t2)) < 1) + return 0; return same_type_p (TYPE_CONTEXT (t1), TYPE_CONTEXT (t2)); case COMPLEX_TYPE: |