aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-06-07 13:28:06 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-06-07 13:28:06 +0000
commitbfec1a842feaaff7d4bda47e35f22de1e8c4f373 (patch)
tree05cfece13f4416aad56cbdb059c8c58d02b6faf7 /gcc/cp
parent505e038544dc82a5be5e4742ef443a32c5eb967c (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--gcc/cp/search.c26
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)