On Wed, Nov 20, 2024 at 10:09 AM Richard Sandiford
<richard.sandif...@arm.com> wrote:
>
> Andrew Pinski <quic_apin...@quicinc.com> writes:
> > This fixes a few aarch64 specific testcases after the move to default to 
> > GNU C23.
> > For the SME testcases, I decided to add a new one for the GNU C23 case as 
> > `()` changing
> > to mean `(void)` instead of a non-prototype declaration and add 
> > `-std=gnu17` to the old one.
> > For pic-*.c `-Wno-old-style-definition` was added not to warn about old 
> > style definitions.
> > For pr113573.c, I added `-std=gnu17` since I was not sure if `(...)` with 
> > C23 would invoke
> > the same issue.
> >
> > tested for aarch64-linux-gnu.
> >
> >       PR testsuite/117680
> > gcc/testsuite/ChangeLog:
> >
> >       * gcc.target/aarch64/pic-constantpool1.c: Add 
> > -Wno-old-style-definition.
> >       * gcc.target/aarch64/pic-symrefplus.c: Likewise.
> >       * gcc.target/aarch64/pr113573.c: Add `-std=gnu17`
> >       * gcc.target/aarch64/sme/streaming_mode_1.c: Likewise.
> >       * gcc.target/aarch64/sme/za_state_1.c: Likewise.
> >       * gcc.target/aarch64/sme/za_state_2.c: Likewise.
> >       * gcc.target/aarch64/sme/streaming_mode_5.c: New test.
> >       * gcc.target/aarch64/sme/za_state_7.c: New test.
> >       * gcc.target/aarch64/sme/za_state_8.c: New test.
>
> Thanks for dealing with this.  I was going to look at the SME ones
> after clearing email/review backlog.
>
> The changes relative to streaming_mode_1.c are:
>
> @@ -7,7 +10,7 @@
>  void sc_b () [[arm::streaming_compatible]]; // { dg-error "conflicting 
> types" }
>
>  void sc_c () [[arm::streaming_compatible]];
> -void sc_c () {} // Inherits attribute from declaration (confusingly).
> +void sc_c () {} // { dg-error "conflicting types" }
>
>  void sc_d ();
>  void sc_d () [[arm::streaming_compatible]] {} // { dg-error "conflicting 
> types" }
> @@ -33,7 +36,7 @@
>  void s_b () [[arm::streaming]]; // { dg-error "conflicting types" }
>
>  void s_c () [[arm::streaming]];
> -void s_c () {} // Inherits attribute from declaration (confusingly).
> +void s_c () {} // { dg-error "conflicting types" }
>
>  void s_d ();
>  void s_d () [[arm::streaming]] {} // { dg-error "conflicting types" }
>
> As the comment implies, the old behaviour for these two lines wasn't
> really what we wanted.  The attributes on () declarations were strictly
> enforced elsewhere, even given the old semantics of ().
>
> So I think we should just update the existing streaming_mode* and
> za_state* tests to cover the new default behaviour, rather than create
> new tests.  OK with that change.

Attached is what I pushed. It removes the new tests and just updates
the old tests. In the commit message I added some small commentary
about what was done.

Thanks,
Andrew


>
> Richard
>
> > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com>
> > ---
> >  .../gcc.target/aarch64/pic-constantpool1.c    |   2 +-
> >  .../gcc.target/aarch64/pic-symrefplus.c       |   2 +-
> >  gcc/testsuite/gcc.target/aarch64/pr113573.c   |   2 +-
> >  .../gcc.target/aarch64/sme/streaming_mode_1.c |   2 +-
> >  .../gcc.target/aarch64/sme/streaming_mode_5.c | 133 +++++++++++++++
> >  .../gcc.target/aarch64/sme/za_state_1.c       |   2 +-
> >  .../gcc.target/aarch64/sme/za_state_2.c       |   2 +-
> >  .../gcc.target/aarch64/sme/za_state_7.c       | 160 ++++++++++++++++++
> >  .../gcc.target/aarch64/sme/za_state_8.c       |  77 +++++++++
> >  9 files changed, 376 insertions(+), 6 deletions(-)
> >  create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_5.c
> >  create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c
> >  create mode 100644 gcc/testsuite/gcc.target/aarch64/sme/za_state_8.c
> >
> > diff --git a/gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c 
> > b/gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c
> > index 755c0b67ea4..1a5da9aacfa 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/pic-constantpool1.c
> > @@ -1,4 +1,4 @@
> > -/* { dg-options "-O2 -mcmodel=small -fPIC" }  */
> > +/* { dg-options "-Wno-old-style-definition -O2 -mcmodel=small -fPIC" }  */
> >  /* { dg-do compile } */
> >  /* { dg-require-effective-target fpic } */
> >
> > diff --git a/gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c 
> > b/gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c
> > index 0c5e7fe7fb4..ca019ce3b33 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/pic-symrefplus.c
> > @@ -1,4 +1,4 @@
> > -/* { dg-options "-O2 -mcmodel=small -fPIC -fno-builtin" }  */
> > +/* { dg-options "-Wno-old-style-definition -O2 -mcmodel=small -fPIC 
> > -fno-builtin" }  */
> >  /* { dg-do compile } */
> >  /* { dg-require-effective-target fpic } */
> >
> > diff --git a/gcc/testsuite/gcc.target/aarch64/pr113573.c 
> > b/gcc/testsuite/gcc.target/aarch64/pr113573.c
> > index fc8607f7218..30175c4cb5c 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/pr113573.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/pr113573.c
> > @@ -1,4 +1,4 @@
> > -/* { dg-options "-O2" } */
> > +/* { dg-options "-O2 -std=gnu17" } */
> >
> >  #pragma GCC aarch64 "arm_neon.h"
> >  typedef __Uint8x8_t uint8x8_t;
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_1.c 
> > b/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_1.c
> > index 8874b05b882..40a79c5e600 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_1.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_1.c
> > @@ -1,4 +1,4 @@
> > -// { dg-options "" }
> > +// { dg-options "-std=gnu17" }
> >
> >  void sc_a () [[arm::streaming_compatible]];
> >  void sc_a (); // { dg-error "conflicting types" }
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_5.c 
> > b/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_5.c
> > new file mode 100644
> > index 00000000000..dbc332b7d2f
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/aarch64/sme/streaming_mode_5.c
> > @@ -0,0 +1,133 @@
> > +// { dg-options "" }
> > +
> > +// This is the GNU C23+ version oftreaming_mode_1.c
> > +// () means (void) rather than not a prototype declaration
> > +
> > +void sc_a () [[arm::streaming_compatible]];
> > +void sc_a (); // { dg-error "conflicting types" }
> > +
> > +void sc_b ();
> > +void sc_b () [[arm::streaming_compatible]]; // { dg-error "conflicting 
> > types" }
> > +
> > +void sc_c () [[arm::streaming_compatible]];
> > +void sc_c () {} // { dg-error "conflicting types" }
> > +
> > +void sc_d ();
> > +void sc_d () [[arm::streaming_compatible]] {} // { dg-error "conflicting 
> > types" }
> > +
> > +void sc_e () [[arm::streaming_compatible]] {}
> > +void sc_e (); // { dg-error "conflicting types" }
> > +
> > +void sc_f () {}
> > +void sc_f () [[arm::streaming_compatible]]; // { dg-error "conflicting 
> > types" }
> > +
> > +extern void (*sc_g) ();
> > +extern void (*sc_g) () [[arm::streaming_compatible]]; // { dg-error 
> > "conflicting types" }
> > +
> > +extern void (*sc_h) () [[arm::streaming_compatible]];
> > +extern void (*sc_h) (); // { dg-error "conflicting types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void s_a () [[arm::streaming]];
> > +void s_a (); // { dg-error "conflicting types" }
> > +
> > +void s_b ();
> > +void s_b () [[arm::streaming]]; // { dg-error "conflicting types" }
> > +
> > +void s_c () [[arm::streaming]];
> > +void s_c () {} // { dg-error "conflicting types" }
> > +
> > +void s_d ();
> > +void s_d () [[arm::streaming]] {} // { dg-error "conflicting types" }
> > +
> > +void s_e () [[arm::streaming]] {}
> > +void s_e (); // { dg-error "conflicting types" }
> > +
> > +void s_f () {}
> > +void s_f () [[arm::streaming]]; // { dg-error "conflicting types" }
> > +
> > +extern void (*s_g) ();
> > +extern void (*s_g) () [[arm::streaming]]; // { dg-error "conflicting 
> > types" }
> > +
> > +extern void (*s_h) () [[arm::streaming]];
> > +extern void (*s_h) (); // { dg-error "conflicting types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void mixed_a () [[arm::streaming]];
> > +void mixed_a () [[arm::streaming_compatible]]; // { dg-error "conflicting 
> > types" }
> > +
> > +void mixed_b () [[arm::streaming_compatible]];
> > +void mixed_b () [[arm::streaming]]; // { dg-error "conflicting types" }
> > +
> > +void mixed_c () [[arm::streaming]];
> > +void mixed_c () [[arm::streaming_compatible]] {} // { dg-error 
> > "conflicting types" }
> > +
> > +void mixed_d () [[arm::streaming_compatible]];
> > +void mixed_d () [[arm::streaming]] {} // { dg-error "conflicting types" }
> > +
> > +void mixed_e () [[arm::streaming]] {}
> > +void mixed_e () [[arm::streaming_compatible]]; // { dg-error "conflicting 
> > types" }
> > +
> > +void mixed_f () [[arm::streaming_compatible]] {}
> > +void mixed_f () [[arm::streaming]]; // { dg-error "conflicting types" }
> > +
> > +extern void (*mixed_g) () [[arm::streaming_compatible]];
> > +extern void (*mixed_g) () [[arm::streaming]]; // { dg-error "conflicting 
> > types" }
> > +
> > +extern void (*mixed_h) () [[arm::streaming]];
> > +extern void (*mixed_h) () [[arm::streaming_compatible]]; // { dg-error 
> > "conflicting types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void contradiction_1 () [[arm::streaming, arm::streaming_compatible]]; // 
> > { dg-warning "conflicts with attribute" }
> > +void contradiction_2 () [[arm::streaming_compatible, arm::streaming]]; // 
> > { dg-warning "conflicts with attribute" }
> > +
> > +int [[arm::streaming_compatible]] int_attr; // { dg-warning "only applies 
> > to function types" }
> > +void [[arm::streaming_compatible]] ret_attr (); // { dg-warning "only 
> > applies to function types" }
> > +void *[[arm::streaming]] ptr_attr; // { dg-warning "only applies to 
> > function types" }
> > +
> > +typedef void s_callback () [[arm::streaming]];
> > +typedef void sc_callback () [[arm::streaming_compatible]];
> > +
> > +typedef void contradiction_callback_1 () [[arm::streaming, 
> > arm::streaming_compatible]]; // { dg-warning "conflicts with attribute" }
> > +typedef void contradiction_callback_2 () [[arm::streaming_compatible, 
> > arm::streaming]]; // { dg-warning "conflicts with attribute" }
> > +
> > +void (*contradiction_callback_ptr_1) () [[arm::streaming, 
> > arm::streaming_compatible]]; // { dg-warning "conflicts with attribute" }
> > +void (*contradiction_callback_ptr_2) () [[arm::streaming_compatible, 
> > arm::streaming]]; // { dg-warning "conflicts with attribute" }
> > +
> > +struct s {
> > +  void (*contradiction_callback_ptr_1) () [[arm::streaming, 
> > arm::streaming_compatible]]; // { dg-warning "conflicts with attribute" }
> > +  void (*contradiction_callback_ptr_2) () [[arm::streaming_compatible, 
> > arm::streaming]]; // { dg-warning "conflicts with attribute" }
> > +};
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void keyword_ok_1 () __arm_streaming;
> > +void keyword_ok_1 () __arm_streaming;
> > +
> > +void keyword_ok_2 () __arm_streaming;
> > +void keyword_ok_2 () [[arm::streaming]];
> > +
> > +void keyword_ok_3 () [[arm::streaming]];
> > +void keyword_ok_3 () __arm_streaming;
> > +
> > +void keyword_ok_4 () __arm_streaming [[arm::streaming]];
> > +
> > +void keyword_ok_5 () __arm_streaming_compatible;
> > +void keyword_ok_5 () [[arm::streaming_compatible]];
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void keyword_contradiction_1 () __arm_streaming;
> > +void keyword_contradiction_1 (); // { dg-error "conflicting types" }
> > +
> > +void keyword_contradiction_2 ();
> > +void keyword_contradiction_2 () __arm_streaming; // { dg-error 
> > "conflicting types" }
> > +
> > +void keyword_contradiction_3 () __arm_streaming;
> > +void keyword_contradiction_3 () [[arm::streaming_compatible]]; // { 
> > dg-error "conflicting types" }
> > +
> > +void keyword_contradiction_4 () [[arm::streaming_compatible]];
> > +void keyword_contradiction_4 () __arm_streaming; // { dg-error 
> > "conflicting types" }
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sme/za_state_1.c 
> > b/gcc/testsuite/gcc.target/aarch64/sme/za_state_1.c
> > index 856880e2109..9bdd4aad17e 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/sme/za_state_1.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/sme/za_state_1.c
> > @@ -1,4 +1,4 @@
> > -// { dg-options "" }
> > +// { dg-options "-std=gnu17" }
> >
> >  void shared_a () [[arm::inout("za")]];
> >  void shared_a (); // { dg-error "conflicting types" }
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sme/za_state_2.c 
> > b/gcc/testsuite/gcc.target/aarch64/sme/za_state_2.c
> > index 572ff309f8d..89dd3043a38 100644
> > --- a/gcc/testsuite/gcc.target/aarch64/sme/za_state_2.c
> > +++ b/gcc/testsuite/gcc.target/aarch64/sme/za_state_2.c
> > @@ -1,4 +1,4 @@
> > -// { dg-options "" }
> > +// { dg-options "-std=gnu17" }
> >
> >  [[arm::new("za")]] void new_za_a ();
> >  void new_za_a ();
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c 
> > b/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c
> > new file mode 100644
> > index 00000000000..a3e3db761d3
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/aarch64/sme/za_state_7.c
> > @@ -0,0 +1,160 @@
> > +// { dg-options "" }
> > +
> > +// This is the GNU C23+ version of za_state_1.c
> > +// `()` means `(void)` instead of previously it was not a non-prototype 
> > declaration.za_state_1.c
> > +// `()` means `(void)` instead of previously it was not a non-prototype 
> > declaration.za_state_1.c
> > +// `()` means `(void)` instead of previously it was not a non-prototype 
> > declaration.za_state_1.c
> > +// `()` means `(void)` instead of previously it was not a non-prototype 
> > declaration.
> > +
> > +void shared_a () [[arm::inout("za")]];
> > +void shared_a (); // { dg-error "conflicting types" }
> > +
> > +void shared_b ();
> > +void shared_b () [[arm::inout("za")]]; // { dg-error "conflicting types" }
> > +
> > +void shared_c () [[arm::inout("za")]];
> > +void shared_c () {} // { dg-error "conflicting types" }
> > +
> > +void shared_d ();
> > +void shared_d () [[arm::inout("za")]] {} // { dg-error "conflicting types" 
> > }
> > +
> > +void shared_e () [[arm::inout("za")]] {}
> > +void shared_e (); // { dg-error "conflicting types" }
> > +
> > +void shared_f () {}
> > +void shared_f () [[arm::inout("za")]]; // { dg-error "conflicting types" }
> > +
> > +extern void (*shared_g) ();
> > +extern void (*shared_g) () [[arm::inout("za")]]; // { dg-error 
> > "conflicting types" }
> > +
> > +extern void (*shared_h) () [[arm::inout("za")]];
> > +extern void (*shared_h) (); // { dg-error "conflicting types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void preserved_a () [[arm::preserves("za")]];
> > +void preserved_a (); // { dg-error "conflicting types" }
> > +
> > +void preserved_b ();
> > +void preserved_b () [[arm::preserves("za")]]; // { dg-error "conflicting 
> > types" }
> > +
> > +void preserved_c () [[arm::preserves("za")]];
> > +void preserved_c () {} // { dg-error "conflicting types" }
> > +
> > +void preserved_d ();
> > +void preserved_d () [[arm::preserves("za")]] {} // { dg-error "conflicting 
> > types" }
> > +
> > +void preserved_e () [[arm::preserves("za")]] {}
> > +void preserved_e (); // { dg-error "conflicting types" }
> > +
> > +void preserved_f () {}
> > +void preserved_f () [[arm::preserves("za")]]; // { dg-error "conflicting 
> > types" }
> > +
> > +extern void (*preserved_g) ();
> > +extern void (*preserved_g) () [[arm::preserves("za")]]; // { dg-error 
> > "conflicting types" }
> > +
> > +extern void (*preserved_h) () [[arm::preserves("za")]];
> > +extern void (*preserved_h) (); // { dg-error "conflicting types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void replicated_1 () [[arm::in("za", "za"), arm::in("za")]];
> > +void replicated_2 () [[arm::out("za", "za"), arm::out("za")]];
> > +void replicated_3 () [[arm::inout("za", "za"), arm::inout("za")]];
> > +void replicated_4 () [[arm::preserves("za", "za"), arm::preserves("za")]];
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void invalid_1 () [[arm::in]]; // { dg-error "wrong number of arguments" }
> > +void invalid_2 () [[arm::in()]]; // { dg-error "parentheses must be 
> > omitted" }
> > +  // { dg-error "wrong number of arguments" "" { target *-*-* } .-1 }
> > +void invalid_3 () [[arm::in("")]]; // { dg-error "unrecognized state 
> > string ''" }
> > +void invalid_4 () [[arm::in("foo")]]; // { dg-error "unrecognized state 
> > string 'foo'" }
> > +void invalid_5 () [[arm::in(42)]]; // { dg-error "the arguments to 'in' 
> > must be constant strings" }
> > +void invalid_6 () [[arm::in(*(int *)0 ? "za" : "za")]]; // { dg-error "the 
> > arguments to 'in' must be constant strings" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void mixed_a () [[arm::preserves("za")]];
> > +void mixed_a () [[arm::inout("za")]]; // { dg-error "conflicting types" }
> > +
> > +void mixed_b () [[arm::inout("za")]];
> > +void mixed_b () [[arm::preserves("za")]]; // { dg-error "conflicting 
> > types" }
> > +
> > +void mixed_c () [[arm::preserves("za")]];
> > +void mixed_c () [[arm::in("za")]] {} // { dg-error "conflicting types" }
> > +
> > +void mixed_d () [[arm::inout("za")]];
> > +void mixed_d () [[arm::in("za")]] {} // { dg-error "conflicting types" }
> > +
> > +void mixed_e () [[arm::out("za")]] {}
> > +void mixed_e () [[arm::in("za")]]; // { dg-error "conflicting types" }
> > +
> > +void mixed_f () [[arm::inout("za")]] {}
> > +void mixed_f () [[arm::out("za")]]; // { dg-error "conflicting types" }
> > +
> > +extern void (*mixed_g) () [[arm::in("za")]];
> > +extern void (*mixed_g) () [[arm::preserves("za")]]; // { dg-error 
> > "conflicting types" }
> > +
> > +extern void (*mixed_h) () [[arm::preserves("za")]];
> > +extern void (*mixed_h) () [[arm::out("za")]]; // { dg-error "conflicting 
> > types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void contradiction_1 () [[arm::preserves("za"), arm::inout("za")]]; // { 
> > dg-error "inconsistent attributes for state 'za'" }
> > +void contradiction_2 () [[arm::inout("za"), arm::preserves("za")]]; // { 
> > dg-error "inconsistent attributes for state 'za'" }
> > +
> > +int [[arm::inout("za")]] int_attr; // { dg-warning "only applies to 
> > function types" }
> > +void *[[arm::preserves("za")]] ptr_attr; // { dg-warning "only applies to 
> > function types" }
> > +
> > +typedef void preserved_callback () [[arm::preserves("za")]];
> > +typedef void shared_callback () [[arm::inout("za")]];
> > +
> > +void (*preserved_callback_ptr) () [[arm::preserves("za")]];
> > +void (*shared_callback_ptr) () [[arm::inout("za")]];
> > +
> > +typedef void contradiction_callback_1 () [[arm::preserves("za"), 
> > arm::inout("za")]]; // { dg-error "inconsistent attributes for state 'za'" }
> > +typedef void contradiction_callback_2 () [[arm::inout("za"), 
> > arm::preserves("za")]]; // { dg-error "inconsistent attributes for state 
> > 'za'" }
> > +
> > +void (*contradiction_callback_ptr_1) () [[arm::preserves("za"), 
> > arm::inout("za")]]; // { dg-error "inconsistent attributes for state 'za'" }
> > +void (*contradiction_callback_ptr_2) () [[arm::inout("za"), 
> > arm::preserves("za")]]; // { dg-error "inconsistent attributes for state 
> > 'za'" }
> > +
> > +struct s {
> > +  void (*contradiction_callback_ptr_1) () [[arm::preserves("za"), 
> > arm::inout("za")]]; // { dg-error "inconsistent attributes for state 'za'" }
> > +  void (*contradiction_callback_ptr_2) () [[arm::inout("za"), 
> > arm::preserves("za")]]; // { dg-error "inconsistent attributes for state 
> > 'za'" }
> > +};
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void keyword_ok_1 () __arm_inout("za");
> > +void keyword_ok_1 () __arm_inout("za");
> > +
> > +void keyword_ok_2 () __arm_in("za");
> > +void keyword_ok_2 () [[arm::in("za")]];
> > +
> > +void keyword_ok_3 () [[arm::out("za")]];
> > +void keyword_ok_3 () __arm_out("za");
> > +
> > +void keyword_ok_4 () __arm_inout("za") [[arm::inout("za")]];
> > +
> > +void keyword_ok_5 () __arm_preserves("za");
> > +void keyword_ok_5 () [[arm::preserves("za")]];
> > +
> > +__arm_new("za") void keyword_ok_6 () {}
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +void keyword_conflict_1 () __arm_inout("za");
> > +void keyword_conflict_1 (); // { dg-error "conflicting types" }
> > +
> > +void keyword_conflict_2 ();
> > +void keyword_conflict_2 () __arm_inout("za"); // { dg-error "conflicting 
> > types" }
> > +
> > +void keyword_conflict_3 () __arm_inout("za");
> > +void keyword_conflict_3 () [[arm::preserves("za")]]; // { dg-error 
> > "conflicting types" }
> > +
> > +void keyword_conflict_4 () [[arm::preserves("za")]];
> > +void keyword_conflict_4 () __arm_inout("za"); // { dg-error "conflicting 
> > types" }
> > +
> > +__arm_new("za") void keyword_conflict_5 () __arm_inout("za") {} // { 
> > dg-error "cannot create a new 'za' scope since 'za' is shared with callers" 
> > }
> > +__arm_new("za") void keyword_conflict_6 () __arm_preserves("za") {} // { 
> > dg-error "cannot create a new 'za' scope since 'za' is shared with callers" 
> > }
> > diff --git a/gcc/testsuite/gcc.target/aarch64/sme/za_state_8.c 
> > b/gcc/testsuite/gcc.target/aarch64/sme/za_state_8.c
> > new file mode 100644
> > index 00000000000..b33439bd77e
> > --- /dev/null
> > +++ b/gcc/testsuite/gcc.target/aarch64/sme/za_state_8.c
> > @@ -0,0 +1,77 @@
> > +// { dg-options "" }
> > +
> > +// This is the GNU23 version of za_state_2.c
> > +// `()` means `(void)` now instead of a non-prototype declaration.
> > +
> > +
> > +[[arm::new("za")]] void new_za_a ();
> > +void new_za_a ();
> > +
> > +void new_za_b ();
> > +[[arm::new("za")]] void new_za_b ();
> > +
> > +[[arm::new("za")]] void new_za_c ();
> > +void new_za_c () {}
> > +
> > +void new_za_d ();
> > +[[arm::new("za")]] void new_za_d () {}
> > +
> > +[[arm::new("za")]] void new_za_e () {}
> > +void new_za_e ();
> > +
> > +void new_za_f () {}
> > +[[arm::new("za")]] void new_za_f (); // { dg-error "cannot apply attribute 
> > 'new' to 'new_za_f' after the function has been defined" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +[[arm::new("za")]] void shared_a ();
> > +void shared_a () [[arm::inout("za")]]; // { dg-error "conflicting types" }
> > +
> > +void shared_b () [[arm::inout("za")]];
> > +[[arm::new("za")]] void shared_b (); // { dg-error "conflicting types" }
> > +
> > +[[arm::new("za")]] void shared_c ();
> > +void shared_c () [[arm::in("za")]] {} // { dg-error "conflicting types" }
> > +
> > +void shared_d () [[arm::in("za")]];
> > +[[arm::new("za")]] void shared_d () {} // { dg-error "conflicting types" }
> > +
> > +[[arm::new("za")]] void shared_e () {}
> > +void shared_e () [[arm::out("za")]]; // { dg-error "conflicting types" }
> > +
> > +void shared_f () [[arm::out("za")]] {}
> > +[[arm::new("za")]] void shared_f (); // { dg-error "conflicting types" }
> > +
> > +[[arm::new("za")]] void shared_g () {}
> > +void shared_g () [[arm::preserves("za")]]; // { dg-error "conflicting 
> > types" }
> > +
> > +void shared_h () [[arm::preserves("za")]] {}
> > +[[arm::new("za")]] void shared_h (); // { dg-error "conflicting types" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +[[arm::new("za")]] void contradiction_1 () [[arm::inout("za")]]; // { 
> > dg-error "cannot create a new 'za' scope since 'za' is shared with callers" 
> > }
> > +void contradiction_2 [[arm::new("za")]] () [[arm::inout("za")]]; // { 
> > dg-error "cannot create a new 'za' scope since 'za' is shared with callers" 
> > }
> > +[[arm::new("za")]] void contradiction_3 () [[arm::preserves("za")]]; // { 
> > dg-error "cannot create a new 'za' scope since 'za' is shared with callers" 
> > }
> > +void contradiction_4 [[arm::new("za")]] () [[arm::preserves("za")]]; // { 
> > dg-error "cannot create a new 'za' scope since 'za' is shared with callers" 
> > }
> > +
> > +int [[arm::new("za")]] int_attr; // { dg-warning "does not apply to types" 
> > }
> > +[[arm::new("za")]] int int_var_attr; // { dg-error "applies only to 
> > function definitions" }
> > +typedef void new_za_callback () [[arm::new("za")]]; // { dg-warning "does 
> > not apply to types" }
> > +[[arm::new("za")]] void (*new_za_var_callback) (); // { dg-error "applies 
> > only to function definitions" }
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +[[arm::new("za")]] void complementary_1 () [[arm::streaming]] {}
> > +void complementary_2 [[arm::new("za")]] () [[arm::streaming]] {}
> > +[[arm::new("za")]] void complementary_3 () [[arm::streaming_compatible]] {}
> > +void complementary_4 [[arm::new("za")]] () [[arm::streaming_compatible]] {}
> > +
> > +//----------------------------------------------------------------------------
> > +
> > +#pragma GCC target "+nosme"
> > +
> > +[[arm::new("za")]] void bereft_1 ();
> > +[[arm::new("za")]] void bereft_2 () {} // { dg-error "functions with SME 
> > state require the ISA extension 'sme'" }
> > +void bereft_3 () [[arm::inout("za")]];
> > +void bereft_4 () [[arm::inout("za")]] {} // { dg-error "functions with SME 
> > state require the ISA extension 'sme'" }

Attachment: 0001-aarch64-Fix-aarch64-after-moving-to-C23.patch
Description: Binary data

Reply via email to