> Hi!
>
> As mentioned in the PR, if bit_offset is not zero, subclasses array
> may contain for unions more entries than classes array. We are going
> to ignore the extra entries, because we only check the ones below words,
> but as classes[words] and above is uninitialized, this triggers undefined
> behavior. merge_classes seems to be a const function, so the patch should
> not affect code generation in any way.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk (and
> 4.9.2?)?
>
> 2014-07-11 Jakub Jelinek <ja...@redhat.com>
>
> PR target/61656
> * config/i386/i386.c (classify_argument): Don't merge classes above
> number of words.
OK,
thanks!
Honza
>
> --- gcc/config/i386/i386.c.jj 2014-07-09 10:41:18.000000000 +0200
> +++ gcc/config/i386/i386.c 2014-07-11 10:23:04.276634260 +0200
> @@ -6581,7 +6581,7 @@ classify_argument (enum machine_mode mod
> bit_offset);
> if (!num)
> return 0;
> - for (i = 0; i < num; i++)
> + for (i = 0; i < num && i < words; i++)
> classes[i] = merge_classes (subclasses[i], classes[i]);
> }
> }
>
> Jakub