home *** CD-ROM | disk | FTP | other *** search
- 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)
-