old-cross-binutils/gdb/gcc.patch
John Gilmore 5e3d0ab075 * gcc.patch: Update for a different GCC (G++) bug.
* main.c (print_gdb_version):  Update copyright year to 1993.
* nm-hp300bsd.h:  Decide whether this is BSD 4.3 or 4.4,
conditionalize this file on it.  FIXME, right way is to split
these into two config files.
(ATTACH_DETACH):  Define for BSD 4.4
(PTRACE_ARG_TYPE):  caddr_t for BSD 4.4, unset for 4.3.
(U_REGS_OFFSET):  Revise for 4.4.
(REGISTER_U_ADDR):  Separate for 4.4, but it doesn't work yet.
* xm-hp300bsd.h:  Move definitions of UINT_MAX, INT_MAX, INT_MIN,
LONG_MAX into this file to avoid cpp "redefinition" warnings.
1993-02-19 06:55:31 +00:00

72 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)