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'" }
0001-aarch64-Fix-aarch64-after-moving-to-C23.patch
Description: Binary data