c: Fix i386 target attribute regression [PR 122180]

My patch (r16-4182-g73888cefe6da65) broke another target (i386), which this
patch fixes.

The issue was the target_version code was incorrectly being triggered on
targets that do not support target_version semantics (i386).

	PR target/122180

gcc/c/ChangeLog:

	* c-decl.cc (pushdecl): Add TARGET_HAS_FMV_TARGET_ATTRIBUTE check.

gcc/testsuite/ChangeLog:

	* gcc.target/i386/pr122180.c: New test.
This commit is contained in:
Alfie Richards 2025-10-07 09:34:48 +00:00
parent bb22f7d4d6
commit d78bd76a49
2 changed files with 12 additions and 2 deletions

View File

@ -3414,8 +3414,11 @@ pushdecl (tree x)
}
}
/* Check if x is part of a FMV set with b_use. */
if (b_use && TREE_CODE (b_use->decl) == FUNCTION_DECL
/* Check if x is part of a FMV set with b_use.
FMV is only supported in c for targets with target_version
attributes. */
if (!TARGET_HAS_FMV_TARGET_ATTRIBUTE
&& b_use && TREE_CODE (b_use->decl) == FUNCTION_DECL
&& TREE_CODE (x) == FUNCTION_DECL && DECL_FILE_SCOPE_P (b_use->decl)
&& DECL_FILE_SCOPE_P (x)
&& disjoint_version_decls (x, b_use->decl)

View File

@ -0,0 +1,7 @@
/* { dg-do compile } */
static void s() __attribute__((target("avx")));
static void s() { }
void f() {
s();
}