From 8b04f60f88079c41b5cb1bf3b7c798703cceea18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= Date: Fri, 1 Nov 2024 17:47:48 +0100 Subject: arm: Fix ICE on arm_mve.h pragma without MVE types [PR117408] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- gcc/config/arm/arm-mve-builtins.cc | 7 +++++++ gcc/testsuite/gcc.target/arm/mve/pr117408-1.c | 7 +++++++ gcc/testsuite/gcc.target/arm/mve/pr117408-2.c | 7 +++++++ 3 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/gcc.target/arm/mve/pr117408-1.c create mode 100644 gcc/testsuite/gcc.target/arm/mve/pr117408-2.c (limited to 'gcc') diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc index af19086..ed3d600 100644 --- a/gcc/config/arm/arm-mve-builtins.cc +++ b/gcc/config/arm/arm-mve-builtins.cc @@ -535,6 +535,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 (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 index 0000000..25eaf67 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/pr117408-1.c @@ -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 index 0000000..c3a0af2 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/mve/pr117408-2.c @@ -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'" } */ -- cgit v1.1