]>
Commit | Line | Data |
---|---|---|
5e3d0ab0 JG |
1 | In the 2.3.2 release of gcc/g++, how the compiler handles resolving |
2 | multiple inheritance lattices was reworked to properly discover | |
3 | ambiguities. We recently found an example which causes this new | |
4 | algorithm to fail in a very subtle way. For the time being, this | |
5 | patch will make the compiler use the old algorithm, which works for | |
6 | the failing case we've found. Note it will revert the compiler's | |
7 | ability to properly deduce MI ambiguities in many cases (to its state | |
8 | in 2.2.2 and 2.3.1). This bug will be fixed in the next gcc/g++ | |
9 | release. | |
5c5b5d4b | 10 | |
5e3d0ab0 JG |
11 | Brendan Kehoe ([email protected]) |
12 | ||
13 | *** cp-search.c.~1~ Thu Feb 18 18:03:24 1993 | |
14 | --- cp-search.c Thu Feb 18 18:03:27 1993 | |
5c5b5d4b | 15 | *************** |
5e3d0ab0 JG |
16 | *** 2389,2392 **** |
17 | --- 2389,2393 ---- | |
18 | if ((*qfn)(base_binfo)) | |
19 | { | |
20 | + #if 0 | |
21 | if (fn == dfs_init_vbase_pointers) | |
22 | { | |
5c5b5d4b | 23 | *************** |
5e3d0ab0 JG |
24 | *** 2464,2467 **** |
25 | --- 2465,2469 ---- | |
26 | saw_first_vbase = save_saw_first_vbase; | |
27 | } else | |
28 | + #endif | |
29 | dfs_walk (base_binfo, fn, qfn); | |
30 | } | |
31 | *************** dfs_init_vbase_pointers (binfo) | |
32 | *** 2658,2661 **** | |
33 | --- 2660,2664 ---- | |
34 | return; | |
5c5b5d4b | 35 | |
5e3d0ab0 JG |
36 | + #if 0 |
37 | this_vbase_ptr = vbase_decl_ptr_intermediate; | |
5c5b5d4b | 38 | |
5e3d0ab0 JG |
39 | *************** dfs_init_vbase_pointers (binfo) |
40 | *** 2662,2668 **** | |
41 | if (TYPE_POINTER_TO (type) != TREE_TYPE (this_vbase_ptr)) | |
42 | my_friendly_abort (125); | |
43 | ||
44 | - #if 0 | |
45 | distance = get_base_distance (type, TREE_TYPE (vbase_decl), 0, &path); | |
46 | if (distance == -2) | |
47 | { | |
48 | --- 2665,2672 ---- | |
49 | if (TYPE_POINTER_TO (type) != TREE_TYPE (this_vbase_ptr)) | |
50 | my_friendly_abort (125); | |
51 | + #endif | |
52 | ||
53 | distance = get_base_distance (type, TREE_TYPE (vbase_decl), 0, &path); | |
54 | + #if 0 | |
55 | if (distance == -2) | |
56 | { | |
57 | *************** dfs_init_vbase_pointers (binfo) | |
58 | *** 2669,2672 **** | |
59 | --- 2673,2677 ---- | |
60 | error ("inheritance lattice too complex below"); | |
61 | } | |
62 | + #endif | |
63 | while (path) | |
64 | { | |
65 | *************** dfs_init_vbase_pointers (binfo) | |
66 | *** 2682,2685 **** | |
67 | --- 2687,2691 ---- | |
68 | this_vbase_ptr = convert_pointer_to (type, vbase_decl_ptr); | |
69 | ||
70 | + #if 0 | |
71 | /* This happens when it is ambiguous. */ | |
72 | if (this_vbase_ptr == error_mark_node) |