binutils-gdb/gdb/gcc.patch

73 lines
2.1 KiB
Diff

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.
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
***************
*** 2389,2392 ****
--- 2389,2393 ----
if ((*qfn)(base_binfo))
{
+ #if 0
if (fn == dfs_init_vbase_pointers)
{
***************
*** 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;
+ #if 0
this_vbase_ptr = vbase_decl_ptr_intermediate;
*************** 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)