[Bug c++/92789] Non-obvious ?: behaviour with structurally equivalent types

rsandifo at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 23 09:44:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92789

--- Comment #1 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> ---
Author: rsandifo
Date: Mon Dec 23 09:43:46 2019
New Revision: 279717

URL: https://gcc.gnu.org/viewcvs?rev=279717&root=gcc&view=rev
Log:
[C++] Make same_type_p return false for gnu_vector_type_p differences (PR
92789)

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.

Originally I'd tried to make it so that "X *" and "Y *" are
interconvertible whenever X and Y are, and similarly for
"X &" and "Y &".  That doesn't fall out naturally though,
and is different from how -flax-vector-conversions works.
The patch therefore accepts all the consequences of making
X and Y !same_type_p instead of trying to work around them.

2019-12-23  Richard Sandiford  <richard.sandiford@arm.com>

gcc/cp/
        PR c++/92789
        * typeck.c (structural_comptypes): Make sure that two vector types
        agree on gnu_vector_type_p.

gcc/testsuite/
        PR c++/92789
        * g++.dg/ext/sve-sizeless-2.C (statements): Expect pointer
        difference and comparisons between GNU and non-GNU types
        to be rejected.  Expect __is_same to be false for such pairs.
        * g++.target/aarch64/sve/acle/general-c++/gnu_vectors_1.C: Remove
        XFAILs.  Expect conversions between SVE vector pointers and
        GNU vector pointers to be rejected.  Test references.
        * g++.target/aarch64/sve/acle/general-c++/gnu_vectors_2.C: Likewise.

Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/typeck.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/ext/sve-sizeless-2.C
    trunk/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/gnu_vectors_1.C
    trunk/gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/gnu_vectors_2.C


More information about the Gcc-bugs mailing list