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)
