1993-02-19 14:55:31 +08:00
|
|
|
In the 2.3.2 release of gcc/g++, how the compiler handles resolving
|
|
|
|
multiple inheritance lattices was reworked to properly discover
|
|
|
|
ambiguities. We recently found an example which causes this new
|
|
|
|
algorithm to fail in a very subtle way. For the time being, this
|
|
|
|
patch will make the compiler use the old algorithm, which works for
|
|
|
|
the failing case we've found. Note it will revert the compiler's
|
|
|
|
ability to properly deduce MI ambiguities in many cases (to its state
|
|
|
|
in 2.2.2 and 2.3.1). This bug will be fixed in the next gcc/g++
|
|
|
|
release.
|
1992-07-10 11:56:17 +08:00
|
|
|
|
1993-02-19 14:55:31 +08:00
|
|
|
Brendan Kehoe (brendan@cygnus.com)
|
|
|
|
|
|
|
|
*** cp-search.c.~1~ Thu Feb 18 18:03:24 1993
|
|
|
|
--- cp-search.c Thu Feb 18 18:03:27 1993
|
1992-07-10 11:56:17 +08:00
|
|
|
***************
|
1993-02-19 14:55:31 +08:00
|
|
|
*** 2389,2392 ****
|
|
|
|
--- 2389,2393 ----
|
|
|
|
if ((*qfn)(base_binfo))
|
|
|
|
{
|
|
|
|
+ #if 0
|
|
|
|
if (fn == dfs_init_vbase_pointers)
|
|
|
|
{
|
1992-07-10 11:56:17 +08:00
|
|
|
***************
|
1993-02-19 14:55:31 +08:00
|
|
|
*** 2464,2467 ****
|
|
|
|
--- 2465,2469 ----
|
|
|
|
saw_first_vbase = save_saw_first_vbase;
|
|
|
|
} else
|
|
|
|
+ #endif
|
|
|
|
dfs_walk (base_binfo, fn, qfn);
|
|
|
|
}
|
|
|
|
*************** dfs_init_vbase_pointers (binfo)
|
|
|
|
*** 2658,2661 ****
|
|
|
|
--- 2660,2664 ----
|
|
|
|
return;
|
1992-07-10 11:56:17 +08:00
|
|
|
|
1993-02-19 14:55:31 +08:00
|
|
|
+ #if 0
|
|
|
|
this_vbase_ptr = vbase_decl_ptr_intermediate;
|
1992-07-10 11:56:17 +08:00
|
|
|
|
1993-02-19 14:55:31 +08:00
|
|
|
*************** dfs_init_vbase_pointers (binfo)
|
|
|
|
*** 2662,2668 ****
|
|
|
|
if (TYPE_POINTER_TO (type) != TREE_TYPE (this_vbase_ptr))
|
|
|
|
my_friendly_abort (125);
|
|
|
|
|
|
|
|
- #if 0
|
|
|
|
distance = get_base_distance (type, TREE_TYPE (vbase_decl), 0, &path);
|
|
|
|
if (distance == -2)
|
|
|
|
{
|
|
|
|
--- 2665,2672 ----
|
|
|
|
if (TYPE_POINTER_TO (type) != TREE_TYPE (this_vbase_ptr))
|
|
|
|
my_friendly_abort (125);
|
|
|
|
+ #endif
|
|
|
|
|
|
|
|
distance = get_base_distance (type, TREE_TYPE (vbase_decl), 0, &path);
|
|
|
|
+ #if 0
|
|
|
|
if (distance == -2)
|
|
|
|
{
|
|
|
|
*************** dfs_init_vbase_pointers (binfo)
|
|
|
|
*** 2669,2672 ****
|
|
|
|
--- 2673,2677 ----
|
|
|
|
error ("inheritance lattice too complex below");
|
|
|
|
}
|
|
|
|
+ #endif
|
|
|
|
while (path)
|
|
|
|
{
|
|
|
|
*************** dfs_init_vbase_pointers (binfo)
|
|
|
|
*** 2682,2685 ****
|
|
|
|
--- 2687,2691 ----
|
|
|
|
this_vbase_ptr = convert_pointer_to (type, vbase_decl_ptr);
|
|
|
|
|
|
|
|
+ #if 0
|
|
|
|
/* This happens when it is ambiguous. */
|
|
|
|
if (this_vbase_ptr == error_mark_node)
|