[PATCH v1 1/1] aarch64: delete vaddd_s64 and vaddd_u64 from arm_neon.h [PR126652]

Karl Meakin <[email protected]> Wed, 5 Aug 2026 16:52:12 +0000
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
Now that `vaddd_s64` and `vaddd_u64` are implemented in the compiler,
the definitions in arm_neon.h are unnecessary. Fix by deleting them.

This fixes PR126652: a compiler error was triggered when `#include
<arm_neon.h>` is wrapped in an `extern "C" {}` block in C++-mode.

	PR target/126652

gcc/ChangeLog:

	* config/aarch64/arm_neon.h (vaddd_s64, vaddd_u64): Delete
	function definitions.

gcc/testsuite/ChangeLog:

	* g++.target/aarch64/pr126652.C: New test.
---
 gcc/config/aarch64/arm_neon.h               | 16 ----------------
 gcc/testsuite/g++.target/aarch64/pr126652.C | 11 +++++++++++
 2 files changed, 11 insertions(+), 16 deletions(-)
 create mode 100644 gcc/testsuite/g++.target/aarch64/pr126652.C

diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 101a6e52106..873a1195d3e 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -5279,22 +5279,6 @@ vabsd_s64 (int64_t __a)
   return __a < 0 ? - (uint64_t) __a : __a;
 }
 
-/* vadd */
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vaddd_s64 (int64_t __a, int64_t __b)
-{
-  return __a + __b;
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vaddd_u64 (uint64_t __a, uint64_t __b)
-{
-  return __a + __b;
-}
-
 /* vaddv */
 
 __extension__ extern __inline int8_t
diff --git a/gcc/testsuite/g++.target/aarch64/pr126652.C b/gcc/testsuite/g++.target/aarch64/pr126652.C
new file mode 100644
index 00000000000..a6916fcdcc8
--- /dev/null
+++ b/gcc/testsuite/g++.target/aarch64/pr126652.C
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#include <arm_neon.h>
+
+#if defined(__cplusplus)
+}
+#endif
-- 
2.51.0