On Sat, Aug 19, 2017 at 10:18 PM, H.J. Lu <[email protected]> wrote:
> Don't override alignment specified by user with the same value to
> preserve TYPE_USER_ALIGN. This fixes PR 53037 tests on Sparc.
>
> Does it look right?
Doesn't match do_type_align so it introduces inconsistencies. The documentation
for TYPE_USER_ALIGN doesn't specify when both cases conflict:
/* 1 if the alignment for this type was requested by "aligned" attribute,
0 if it is the default for this type. */
Note that for example the vectorizer looks at DECL_USER_ALIGN (for
non-field-decls)
to decide whether it can increase alignment.
Richard.
>
> H.J.
> --
> * stor-layout.c (finalize_type_size): Don't override alignment
> specified by user with the same value.
> ---
> gcc/stor-layout.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c
> index 3028d55773a..6dd605810ac 100644
> --- a/gcc/stor-layout.c
> +++ b/gcc/stor-layout.c
> @@ -1784,7 +1784,7 @@ finalize_type_size (tree type)
>
> /* Don't override a larger alignment requirement coming from a user
> alignment of one of the fields. */
> - if (mode_align >= TYPE_ALIGN (type))
> + if (mode_align > TYPE_ALIGN (type))
> {
> SET_TYPE_ALIGN (type, mode_align);
> TYPE_USER_ALIGN (type) = 0;
> --
> 2.13.5
>