From: Alfie Richards <[email protected]>
Small fix for a regression I caused.
Reg tested on x86-unknown-linux-gnu and aarch64-unknown-linux-gnu.
Ok for master?
-- >8 --
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.
---
gcc/c/c-decl.cc | 7 +++++--
gcc/testsuite/gcc.target/i386/pr122180.c | 7 +++++++
2 files changed, 12 insertions(+), 2 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/i386/pr122180.c
diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index 632bbf057a3..68e7343d04b 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -3410,8 +3410,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)
diff --git a/gcc/testsuite/gcc.target/i386/pr122180.c
b/gcc/testsuite/gcc.target/i386/pr122180.c
new file mode 100644
index 00000000000..6153d6c4c71
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr122180.c
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+
+static void s() __attribute__((target("avx")));
+static void s() { }
+void f() {
+ s();
+}
--
2.34.1