On Tue, Feb 17, 2026 at 7:28 PM Alice Carlotti <[email protected]> wrote: > > On Tue, Feb 17, 2026 at 07:16:13PM -0800, Andrew Pinski wrote: > > On Tue, Feb 17, 2026 at 7:09 PM Alice Carlotti <[email protected]> > > wrote: > > > > > > On Tue, Feb 17, 2026 at 02:44:12PM -0800, Andrew Pinski wrote: > > > > aarch64_init_ls64_builtins_types currently creates an array with type > > > > uint64_t[8] > > > > and then sets the mode to V8DI. The problem here is if you used that > > > > array > > > > type before, you would get a mode of BLK. > > > > This causes an ICE in some cases, with the C++ front-end with -g, you > > > > would > > > > get "type variant differs by TYPE_MODE" and in some cases even without > > > > -g, > > > > "canonical types differ for identical types". > > > > > > > > The fix is to do build_distinct_type_copy of the array in > > > > aarch64_init_ls64_builtins_types > > > > before assigning the mode to that copy. We keep the same ls64 > > > > structures correct and > > > > user provided arrays are not influenced when "arm_neon.h" is included. > > > > > > > > Build and tested on aarch64-linux-gnu. > > > > > > > > PR target/124126 > > > > > > > > gcc/ChangeLog: > > > > > > > > * config/aarch64/aarch64-builtins.cc > > > > (aarch64_init_ls64_builtins_types): Copy > > > > the array type before setting the mode. > > > > > > > > gcc/testsuite/ChangeLog: > > > > > > > > * c-c++-common/aarch64/pr124126-1.c: New test. > > > > > > > > Signed-off-by: Andrew Pinski <[email protected]> > > > > --- > > > > gcc/config/aarch64/aarch64-builtins.cc | 1 + > > > > gcc/testsuite/c-c++-common/aarch64/pr124126-1.c | 15 +++++++++++++++ > > > > 2 files changed, 16 insertions(+) > > > > create mode 100644 gcc/testsuite/c-c++-common/aarch64/pr124126-1.c > > > > > > > > diff --git a/gcc/config/aarch64/aarch64-builtins.cc > > > > b/gcc/config/aarch64/aarch64-builtins.cc > > > > index 5bb873c3923..611f6dc45e0 100644 > > > > --- a/gcc/config/aarch64/aarch64-builtins.cc > > > > +++ b/gcc/config/aarch64/aarch64-builtins.cc > > > > @@ -2321,6 +2321,7 @@ aarch64_init_ls64_builtins_types (void) > > > > const char *tuple_type_name = "__arm_data512_t"; > > > > tree node_type = get_typenode_from_name (UINT64_TYPE); > > > > tree array_type = build_array_type_nelts (node_type, 8); > > > > + array_type = build_distinct_type_copy (array_type); > > > > SET_TYPE_MODE (array_type, V8DImode); > > > > > > > > gcc_assert (TYPE_MODE_RAW (array_type) == TYPE_MODE (array_type)); > > > > diff --git a/gcc/testsuite/c-c++-common/aarch64/pr124126-1.c > > > > b/gcc/testsuite/c-c++-common/aarch64/pr124126-1.c > > > > new file mode 100644 > > > > index 00000000000..ffe4fb6690b > > > > --- /dev/null > > > > +++ b/gcc/testsuite/c-c++-common/aarch64/pr124126-1.c > > > > @@ -0,0 +1,15 @@ > > > > +/* { dg-do compile } */ > > > > +/* { dg-additional-options "-g" } */ > > > > > > The bug can be reproduced on older branches by adding `+ls64` to the > > > command > > > line. > > > > > > This patch is ok with that change (for all open branches). > > > > I assume for the other branches we should place the testcase at > > g++.target/aarch64/pr124126-1.C . > > In the context of this patch, I'm fine with any (reasonable) location for the > test file. > > > And was the testcase change ok for the trunk or should we just have 2 > > copies, one in gcc.target and one in g++.target ? > > I'll let others comment on patch 1/1 (although I've responded to that as > well).
Since there has been almost no comments on patch 1, I moved the
testcase to g++.target
and pushed this patch.
Thanks,
Andrew
>
> Alice
>
> >
> > Thanks,
> > Andrew
> >
> > >
> > > Alice
> > >
> > > > +/* PR target/124126 */
> > > > +/* Make sure an array of uint64_t[8] works when
> > > > + used before the inlcude of arm_acle.h. */
> > > > +
> > > > +typedef unsigned long uint64_t;
> > > > +void executeSuperscalar(uint64_t (*r)[8]);
> > > > +
> > > > +#include "arm_acle.h"
> > > > +
> > > > +void initDatasetItem() {
> > > > + uint64_t rl[8];
> > > > + executeSuperscalar(&rl);
> > > > +}
> > > > --
> > > > 2.43.0
> > > >
0001-aarch64-Fix-uint64_t-8-usage-after-including-arm_neo.patch
Description: Binary data
