diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-06-07 13:28:06 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-06-07 13:28:06 +0000 |
commit | bfec1a842feaaff7d4bda47e35f22de1e8c4f373 (patch) | |
tree | 05cfece13f4416aad56cbdb059c8c58d02b6faf7 /gcc/cp | |
parent | 505e038544dc82a5be5e4742ef443a32c5eb967c (diff) | |
download | gcc-bfec1a842feaaff7d4bda47e35f22de1e8c4f373.zip gcc-bfec1a842feaaff7d4bda47e35f22de1e8c4f373.tar.gz gcc-bfec1a842feaaff7d4bda47e35f22de1e8c4f373.tar.bz2 |
search.c (convert_pointer_to_single_level): Reimplement without using get_binfo.
* search.c (convert_pointer_to_single_level): Reimplement without
using get_binfo.
From-SVN: r27394
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/search.c | 26 |
2 files changed, 29 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e89dfdf..72aa8d4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +1999-06-07 Mark Mitchell <mark@codesourcery.com> + + * search.c (convert_pointer_to_single_level): Reimplement without + using get_binfo. + +1999-06-06 Mark Mitchell <mark@codesourcery.com> + + * method.c (is_back_referenceable_type): Back-reference bools when + not squangling. + 1999-06-07 Dave Brolley <brolley@cygnus.com> * lex.c (real_yylex): Replace unused bytes from bad multibyte char. diff --git a/gcc/cp/search.c b/gcc/cp/search.c index 63b733d..9bac6e6 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -2057,17 +2057,29 @@ static tree convert_pointer_to_single_level (to_type, expr) tree to_type, expr; { + tree derived; tree binfo_of_derived; - tree last; + int i; - binfo_of_derived = TYPE_BINFO (TREE_TYPE (TREE_TYPE (expr))); - last = get_binfo (to_type, TREE_TYPE (TREE_TYPE (expr)), 0); - my_friendly_assert (BINFO_INHERITANCE_CHAIN (last) == binfo_of_derived, - 980827); + derived = TREE_TYPE (TREE_TYPE (expr)); + binfo_of_derived = TYPE_BINFO (derived); my_friendly_assert (BINFO_INHERITANCE_CHAIN (binfo_of_derived) == NULL_TREE, 980827); - return build_vbase_path (PLUS_EXPR, build_pointer_type (to_type), expr, - last, 1); + for (i = CLASSTYPE_N_BASECLASSES (derived) - 1; i >= 0; --i) + { + tree binfo = BINFO_BASETYPE (binfo_of_derived, i); + my_friendly_assert (BINFO_INHERITANCE_CHAIN (binfo) == binfo_of_derived, + 980827); + if (same_type_p (BINFO_TYPE (binfo), to_type)) + return build_vbase_path (PLUS_EXPR, + build_pointer_type (to_type), + expr, binfo, 1); + } + + my_friendly_abort (19990607); + + /* NOTREACHED */ + return NULL_TREE; } tree markedp (binfo, data) |