On Thu, Sep 3, 2020 at 8:10 PM Segher Boessenkool
<seg...@kernel.crashing.org> wrote:
>
> Hi!
>
> On Thu, Sep 03, 2020 at 10:37:33AM -0500, will schmidt wrote:
> > On Wed, 2020-09-02 at 05:13 -0500, Segher Boessenkool wrote:
> > > On Tue, Sep 01, 2020 at 09:00:20PM -0500, will schmidt wrote:
> > > >   This corrects an issue with the powerpc vector long long
> > > > subtypes.
> > > > As reported by SjMunroe in PR96139.  When building some code with
> > > > -Wall
> > > > and attempting to print an element of a "long long vector" with a
> > > > long long
> > > > printf format string, we will report a error because the vector
> > > > sub-type
> > > > was improperly defined as int.
> > > >
> > > > When defining a V2DI_type_node we use a TARGET_POWERPC64 ternary to
> > > > define the V2DI_type_node with "vector long" or "vector long long".
> > > > We also need to specify the proper sub-type when we define the
> > > > type.
> > > > -  V2DI_type_node = rs6000_vector_type (TARGET_POWERPC64 ?
> > > > "__vector long"
> > > > -                                : "__vector long long",
> > > > -                                intDI_type_node, 2);
> > > > +  V2DI_type_node
> > > > +    = rs6000_vector_type (TARGET_POWERPC64
> > > > +                   ? "__vector long" : "__vector long long",
> > > > +                   TARGET_POWERPC64
> > > > +                   ? long_long_integer_type_node :
> > > > intDI_type_node,
> > > > +                   2);
> > >
> > > Can't you just use long_long_integer_type_node in all cases?  Or,
> > > what
> > > else is intDI_type_node for 32 bit?
> >
> > I'm not sure offhand.  I'm tending to assume the use of intDI_type_node
> > is critical for some underlying reason.    I'll give this a spin with
> > just long_long_integer_type_node and see what happens.
>
> If that works, that is okay for trunk (and all backports you want).  If
> not, just use what you sent.

Beware of alias issues!  'long' and 'long long' are distinct types even if
they have the same size and long * aliases with vector<long> * but not
with vector<long long> *.

So if the user writes 'vector long' you should use the appropriate component
type.  If the user writes 'vector intDI_type' you should use intDI_type.

Richard.

> Thanks!
>
>
> Segher

Reply via email to