This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH,c++] rewrite vtable initialization construction to use VECs
On Tue, 2010-06-15 at 10:59 -0700, Nathan Froyd wrote:
> Would you try the below patch (against mainline, not on top of my
> previous patch), please? I think that should resolve the problems
> you're seeing, assuming I didn't botch my arithmetic.
>
> -Nathan
>
> Index: class.c
> ===================================================================
> --- class.c (revision 160473)
> +++ class.c (working copy)
> @@ -7618,14 +7618,15 @@ build_vtbl_initializer (tree binfo,
> ix--)
> {
> int j;
> - int new_position = TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix;
> + int new_position = (TARGET_VTABLE_DATA_ENTRY_DISTANCE * ix
> + - (TARGET_VTABLE_DATA_ENTRY_DISTANCE - 1));
>
> VEC_replace (constructor_elt, vid.inits, new_position, e);
>
> for (j = 1; j < TARGET_VTABLE_DATA_ENTRY_DISTANCE; ++j)
> {
> - constructor_elt *f = VEC_index (constructor_elt, *inits,
> - new_position + j);
> + constructor_elt *f = VEC_index (constructor_elt, vid.inits,
> + new_position - j);
> f->index = NULL_TREE;
> f->value = build1 (NOP_EXPR, vtable_entry_type,
> null_pointer_node);
>
Nope, this isn't working.
/proj/opensrc/nightly/src/trunk/libstdc++-v3/libsupc++/exception:61:9:
internal compiler error: vector VEC(constructor_elt,base) replace domain
error, in build_vtbl_initializer at cp/class.c:7624
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make[4]: *** [ia64-hp-hpux11.23/bits/stdc++.h.gch/O2ggnu++0x.gch] Error
1
Should
VEC_replace (constructor_elt, vid.inits, new_position, e);
be
VEC_replace (constructor_elt, *inits, new_position, e);
It doesn't look like this changed in your patch, but it differs from
other VEC_replace calls.
Steve Ellcey
sje@cup.hp.com