[C++ PATCH] Make same_type_p return false for gnu_vector_type_p differences (PR 92789)

Jason Merrill jason@redhat.com
Thu Dec 19 19:17:00 GMT 2019


On Thu, Dec 19, 2019 at 11:52 AM Richard Sandiford <
richard.sandiford@arm.com> wrote:

> Jason Merrill <jason@redhat.com> writes:
> > On 12/12/19 10:16 AM, Richard Sandiford wrote:
> >> As Jason pointed out in the review of the C++ gnu_vector_type_p patch:
> >>
> >>      https://gcc.gnu.org/ml/gcc-patches/2019-12/msg00173.html
> >>
> >> the real fix for the XFAILs in acle/general-c++/gnu_vectors_*.C is to
> >> make same_type_p return false for two types if one is gnu_vector_type_p
> >> and the other isn't.  This patch does that and fixes the fallout in the
> >> way Jason suggested above.
> >>
> >> I'd said at the time that some of the tests require:
> >>
> >>        /* If the constructor already has the array type, it's been
> through
> >>       digest_init, so we shouldn't try to do anything more.  */
> >>        bool digested = same_type_p (atype, TREE_TYPE (init));
> >>
> >> (build_vec_init) to be true for gnu vectors built from non-gnu vectors.
> >> I can no longer reproduce that, maybe because my original same_type_p
> >> change was bogus or because something in the later sizeless type
> >> support made it moot (or something else :-)).
> >>
> >> This means that sve-sizeless-2.C (the length-specific test) now reports
> >> some errors for comparisons and pointer differences that
> sve-sizeless-1.C
> >> (the length-agnostic test) already had.  I think requiring a cast is OK
> >> for those cases, since there's no reason to mix GNU and non-GNU versions
> >> of the same vector in the same object.  Even -flax-vector-conversions
> >> would require a cast for different vector types here, for both C and
> C++.
> >>
> >> same_type_p had:
> >>
> >>    else if (strict == COMPARE_STRUCTURAL)
> >>      return structural_comptypes (t1, t2, COMPARE_STRICT);
> >>    else
> >>      return structural_comptypes (t1, t2, strict);
> >>
> >> Since structural_comptypes ignored the COMPARE_STRUCTURAL bit of
> "strict"
> >> before the patch, the "else if" was harmless but AFAICT unnecessary.
> >
> > The comment in cp-tree.h has
> >
> >> #define COMPARE_STRUCTURAL    8 /* The comparison is intended to be
>
> >>                                    structural. The actual comparison
>
> >>                                    will be identical to
>
> >>                                    COMPARE_STRICT.  */
> >
> > So introducing differences between COMPARE_STRUCTURAL and COMPARE_STRICT
> > other than that the first always calls structural_comptypes and the
> > second sometimes compares TYPE_CANONICAL instead is to be avoided.
>
> OK.
>
> > Do you want to use vector_types_convertible_p in similar_type_p?
>
> The problem then is that we'll apply -flax-vector-conversion rules too,
> which seems to be going too far beyond what [conv.qual] says.
>
> But that's probably a sign that I was wanting the wrong behaviour here.
> The main point is to ensure that similar GNU and non-GNU vectors remain
> interconveritble without -flax-vector-conversions, and without any
> warnings.  There's no specific requirement to extend that to pointers,
> it just seemed like the natural thing to do at the time.
>
> So on reflection, I guess we should just accept the consequences of
> making the types !same_type_p.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?
> If so, I'll follow up with a corresponding patch for C.
>

OK.

>
>



More information about the Gcc-patches mailing list