This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/22488] [4.1 Regression] push_fields_onto_fieldstack calculates offset incorrectly
- From: "jason at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Oct 2005 21:05:12 -0000
- Subject: [Bug tree-optimization/22488] [4.1 Regression] push_fields_onto_fieldstack calculates offset incorrectly
- References: <bug-22488-7559@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #42 from jason at redhat dot com 2005-10-04 21:05 -------
Subject: Re: [4.1 Regression] push_fields_onto_fieldstack
calculates offset incorrectly
mark at codesourcery dot com wrote:
> So, I guess maybe we agree on the right plan. In particular:
>
> 1. When we see "T*" or "T&", use the as-base version of T for the type.
> Therefore, for expressions like "*p" where "p" has type "T*", we would
> give the expression the as-base version of T. However, for expressions
> like "t" (where "t" is of type "T"), use the complete version of "t".
Yep.
> 2. Undo your change at the end of layout_class_type, so that base fields
> have the as-base type.
Agreed.
> We could implement (1) either by (a) doing that directly during parsing,
> etc., or (b) by handling it during genericization/gimplification. I
> vote for the latter. It should be relatively simple; do a pre-order
> walk of the expression tree, and adjust the types of things from the
> bottom up.
>
> I'm not sure what else we would need to do. We need to tell the
> optimizers that the as-base type can alias the complete type; I guess we
> just give them the same alias set.
I was suggesting that instead of making the complete type and base type
essentially copies of one another, that we make the complete type a
wrapper around the base type. Proper alias semantics would fall out of
that.
> We also need the optimizers to
> understand that "*p = *q" is going to copy TYPE_SIZE (complete type)
> bytes...
We don't do bitwise assignment if a class has a vptr, so whenever we
generate something like that the complete type and base type should be
the same.
Jason
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22488