[PATCH, AArch64] Fix for PR67896 (C++ FE cannot distinguish __Poly{8,16,64,128}_t types)
James Greenhalgh
james.greenhalgh@arm.com
Mon Jan 25 12:15:00 GMT 2016
On Wed, Jan 20, 2016 at 09:27:41PM +0100, Roger Ferrer Ibáñez wrote:
> Hi James,
>
> > This patch looks technically correct to me, though there is a small
> > style issue to correct (in-line below), and your ChangeLogs don't fit
> > our usual style.
>
> thank you very much for the useful comments. I'm attaching a new
> version of the patch with the style issues (hopefully) ironed out.
Thanks, this version of the patch looks correct to me.
> > > P.S.: I haven't signed the copyright assignment to the FSF. The change
> > > is really small but I can do the paperwork if required.
I can't commit it on your behalf until we've heard back regarding whether
this needs a copyright assignment to the FSF, but once I've heard I'd
be happy to commit this for you. I'll expand the CC list a bit further
to see if we can get an answer on that.
Thanks again for the analysis and patch.
James
> gcc/ChangeLog:
>
> 2016-01-19 Roger Ferrer Ibáñez <rofirrim@gmail.com>
>
> PR target/67896
> * config/aarch64/aarch64-builtins.c
> (aarch64_init_simd_builtin_types): Do not set structural
> equality to __Poly{8,16,64,128}_t types.
>
> gcc/testsuite/ChangeLog:
>
> 2016-01-19 Roger Ferrer Ibáñez <rofirrim@gmail.com>
>
> PR target/67896
> * gcc.target/aarch64/simd/pr67896.C: New.
>
> --
> Roger Ferrer Ibáñez
> From 72c065f6a3f9d168baf357de1b567faa6042c03b Mon Sep 17 00:00:00 2001
> From: Roger Ferrer Ibanez <roger.ferrer@bsc.es>
> Date: Wed, 20 Jan 2016 21:11:42 +0100
> Subject: [PATCH] Do not set structural equality on polynomial types
>
> ---
> gcc/config/aarch64/aarch64-builtins.c | 10 ++++++----
> gcc/testsuite/gcc.target/aarch64/simd/pr67896.C | 7 +++++++
> 2 files changed, 13 insertions(+), 4 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/aarch64/simd/pr67896.C
>
> diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c
> index bd7a8dd..40272ed 100644
> --- a/gcc/config/aarch64/aarch64-builtins.c
> +++ b/gcc/config/aarch64/aarch64-builtins.c
> @@ -610,14 +610,16 @@ aarch64_init_simd_builtin_types (void)
> enum machine_mode mode = aarch64_simd_types[i].mode;
>
> if (aarch64_simd_types[i].itype == NULL)
> - aarch64_simd_types[i].itype =
> - build_distinct_type_copy
> - (build_vector_type (eltype, GET_MODE_NUNITS (mode)));
> + {
> + aarch64_simd_types[i].itype
> + = build_distinct_type_copy
> + (build_vector_type (eltype, GET_MODE_NUNITS (mode)));
> + SET_TYPE_STRUCTURAL_EQUALITY (aarch64_simd_types[i].itype);
> + }
>
> tdecl = add_builtin_type (aarch64_simd_types[i].name,
> aarch64_simd_types[i].itype);
> TYPE_NAME (aarch64_simd_types[i].itype) = tdecl;
> - SET_TYPE_STRUCTURAL_EQUALITY (aarch64_simd_types[i].itype);
> }
>
> #define AARCH64_BUILD_SIGNED_TYPE(mode) \
> diff --git a/gcc/testsuite/gcc.target/aarch64/simd/pr67896.C b/gcc/testsuite/gcc.target/aarch64/simd/pr67896.C
> new file mode 100644
> index 0000000..1f916e0
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/simd/pr67896.C
> @@ -0,0 +1,7 @@
> +typedef __Poly8_t A;
> +typedef __Poly16_t A; /* { dg-error "conflicting declaration" } */
> +typedef __Poly64_t A; /* { dg-error "conflicting declaration" } */
> +typedef __Poly128_t A; /* { dg-error "conflicting declaration" } */
> +
> +typedef __Poly8x8_t B;
> +typedef __Poly16x8_t B; /* { dg-error "conflicting declaration" } */
> --
> 2.1.4
>
More information about the Gcc-patches
mailing list