]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm: Fix ICE on arm_mve.h pragma without MVE types [PR117408]
authorTorbjörn SVENSSON <torbjorn.svensson@foss.st.com>
Fri, 1 Nov 2024 16:47:48 +0000 (17:47 +0100)
committerTorbjörn SVENSSON <torbjorn.svensson@foss.st.com>
Sat, 9 Nov 2024 12:35:55 +0000 (13:35 +0100)
Starting with r14-435-g00d97bf3b5a, doing `#pragma arm "arm_mve.h"
false` or `#pragma arm "arm_mve.h" true` without first doing
`#pragma arm "arm_mve_types.h"` causes GCC to ICE.

gcc/ChangeLog:

PR target/117408
* config/arm/arm-mve-builtins.cc(handle_arm_mve_h): Detect if MVE
types is missing and if so, return error.

gcc/testsuite/ChangeLog:

PR target/117408
* gcc.target/arm/mve/pr117408-1.c: New test.
* gcc.target/arm/mve/pr117408-2.c: Likewise.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
(cherry picked from commit 8b04f60f88079c41b5cb1bf3b7c798703cceea18)

gcc/config/arm/arm-mve-builtins.cc
gcc/testsuite/gcc.target/arm/mve/pr117408-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/arm/mve/pr117408-2.c [new file with mode: 0644]

index 7e8217666feedf3b27326c4f90736f0e61f68c69..e1826ae40527ad7b023f95438d41c0a5cd18b24f 100644 (file)
@@ -492,6 +492,13 @@ handle_arm_mve_h (bool preserve_user_namespace)
       return;
     }
 
+  if (!handle_arm_mve_types_p)
+    {
+      error ("this definition requires MVE types, please include %qs",
+            "arm_mve_types.h");
+      return;
+    }
+
   /* Define MVE functions.  */
   function_table = new hash_table<registered_function_hasher> (1023);
   function_builder builder;
diff --git a/gcc/testsuite/gcc.target/arm/mve/pr117408-1.c b/gcc/testsuite/gcc.target/arm/mve/pr117408-1.c
new file mode 100644 (file)
index 0000000..25eaf67
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_1m_mve_ok } */
+/* { dg-add-options arm_v8_1m_mve } */
+
+/* It doesn't really matter if this produces errors missing types,
+      but it mustn't trigger an ICE.  */
+#pragma GCC arm "arm_mve.h" false /* { dg-error "this definition requires MVE types, please include 'arm_mve_types.h'" } */
diff --git a/gcc/testsuite/gcc.target/arm/mve/pr117408-2.c b/gcc/testsuite/gcc.target/arm/mve/pr117408-2.c
new file mode 100644 (file)
index 0000000..c3a0af2
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_v8_1m_mve_ok } */
+/* { dg-add-options arm_v8_1m_mve } */
+
+/* It doesn't really matter if this produces errors missing types,
+      but it mustn't trigger an ICE.  */
+#pragma GCC arm "arm_mve.h" true /* { dg-error "this definition requires MVE types, please include 'arm_mve_types.h'" } */