2015-03-16 19:07 GMT+01:00 Jason Merrill <ja...@redhat.com>:
> If there is an alignment mismatch without user intervention, there is a
> problem, we can't just ignore it.
>
> Where we run into trouble is with array types where the version built
> earlier has not been laid out yet but the new one has been.  I've been
> trying to deal with that by making sure that we lay out the original type as
> well, but obviously that isn't working for this case.  Why not?

Well, TYPE_ALIGN (t) is set to 32, and it differs to TYPE_ALIGN
(result) (value 8), and TYPE_USER_ALIGN isn't set.

> I suppose we could avoid checking TYPE_ALIGN if neither TYPE_USER_ALIGN nor
> TYPE_SIZE are set on 't', but checking TYPE_USER_ALIGN isn't enough.

For t TYPE_SIZE is set, but it isn't a constant (as it is an variably
modified type).  So we could add here additional check if TYPE_SIZE is
a integer-constant?

Something like this condition you mean?

...
if (TYPE_USER_ALIGN (t) != TYPE_USER_ALIGN (result)
    || ((TYPE_USER_ALIGN (t) || TREE_CODE (TYPE_SIZE (t)) == INTEGER_CST)
        && TYPE_ALIGN (t) != TYPE_ALIGN (result)))
  {
...
> Jason

Kai

Reply via email to