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
> > > >

Attachment: 0001-aarch64-Fix-uint64_t-8-usage-after-including-arm_neo.patch
Description: Binary data

Reply via email to