On Mon, Jul 20, 2026 at 12:58:35PM +0000, Alex Coplan via Sourceware Forge
wrote:
> From: Alex Coplan <[email protected]>
>
> This is a follow-up patch to Richard E's r17-2498-g17f084306c68c4 (#186
> on the Forge). As Alice pointed out in her review:
> https://gcc.gnu.org/pipermail/gcc-patches/2026-July/724391.html
> the original patch missed things like +memtag+tme due to the string
> parsing approach. This instead just inspects the parsed feature flags
> from aarch64_parse_extension to determine whether to warn in the target
> attribute/pragma case.
>
> +tme on the command line is handled as per Richard's original patch (no
> change there).
Ok, thanks
>
> gcc/ChangeLog:
>
> * config/aarch64/aarch64.cc (aarch64_handle_attr_isa_flags):
> Warn if +tme is enabled by the target attribute/pragma, relying
> on the feature flags from aarch64_parse_extension.
> (aarch64_process_target_attr): Drop +tme warning based on custom
> string parsing.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/aarch64/deprecate-tme.c: New test.
> ---
> gcc/config/aarch64/aarch64.cc | 8 ++++----
> gcc/testsuite/gcc.target/aarch64/deprecate-tme.c | 16 ++++++++++++++++
> 2 files changed, 20 insertions(+), 4 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/aarch64/deprecate-tme.c
>
> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
> index 40b68709dbb1..61562c94a553 100644
> --- a/gcc/config/aarch64/aarch64.cc
> +++ b/gcc/config/aarch64/aarch64.cc
> @@ -20822,6 +20822,10 @@ aarch64_handle_attr_isa_flags (char *str)
>
> if (parse_res == AARCH_PARSE_OK)
> {
> + if (!TARGET_TME && (isa_flags & AARCH64_FL_TME))
> + warning (OPT_Wdeprecated,
> + "the architecture extension %<+tme%> is deprecated");
> +
> aarch64_set_asm_isa_flags (isa_flags);
> return true;
> }
> @@ -21083,10 +21087,6 @@ aarch64_process_target_attr (tree args)
> {
> num_attrs++;
>
> - if (strcmp (token, "+tme") == 0 && !TARGET_TME)
> - warning (OPT_Wdeprecated,
> - "the architecture extension %<+tme%> is deprecated");
> -
> if (!aarch64_process_one_target_attr (token))
> {
> /* Check if token is possibly an arch extension without
> diff --git a/gcc/testsuite/gcc.target/aarch64/deprecate-tme.c
> b/gcc/testsuite/gcc.target/aarch64/deprecate-tme.c
> new file mode 100644
> index 000000000000..b190c4d2c211
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/deprecate-tme.c
> @@ -0,0 +1,16 @@
> +/* { dg-do compile } */
> +
> +__attribute__((target("+tme")))
> +void a(void) {} /* { dg-warning {'\+tme' is deprecated} } */
> +
> +__attribute__((target("+dotprod+tme")))
> +void b(void) {} /* { dg-warning {'\+tme' is deprecated} } */
> +
> +#pragma GCC target ("+nothing+tme") /* { dg-warning {'\+tme' is deprecated}
> } */
> +
> +void c(void) {}
> +
> +/* No warning here, we only want to warn when tme transitions from
> + disabled to enabled. This helps keeps noise to a minimum. */
> +__attribute__((target("+tme")))
> +void d(void) {}
> --
> 2.54.0
>