aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlex Coplan <alex.coplan@arm.com>2021-03-04 14:36:39 +0000
committerAlex Coplan <alex.coplan@arm.com>2021-03-04 14:36:39 +0000
commita6bc1680a493de356d6a381718021c6a44401201 (patch)
treeb0d6a3b1f47d3c4b7f161cc6ab945754e04ad639 /gcc
parent9553c8a1b9dd2ca2f0f30d8b23fc6844c7e4a223 (diff)
downloadgcc-a6bc1680a493de356d6a381718021c6a44401201.zip
gcc-a6bc1680a493de356d6a381718021c6a44401201.tar.gz
gcc-a6bc1680a493de356d6a381718021c6a44401201.tar.bz2
aarch64: Add missing error_mark_node check [PR99381]
We were missing a check in function_resolver::require_vector_type to see if the argument type was already invalid. This was causing us to attempt to emit a diagnostic and subsequently ICE in print_type. Fixed thusly. gcc/ChangeLog: PR target/99381 * config/aarch64/aarch64-sve-builtins.cc (function_resolver::require_vector_type): Handle error_mark_node. gcc/testsuite/ChangeLog: PR target/99381 * gcc.target/aarch64/pr99381.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/aarch64/aarch64-sve-builtins.cc3
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr99381.c10
2 files changed, 13 insertions, 0 deletions
diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc
index 6270b51..25612d2 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
@@ -1467,6 +1467,9 @@ function_resolver::require_vector_type (unsigned int argno,
{
tree expected = acle_vector_types[0][type];
tree actual = get_argument_type (argno);
+ if (actual == error_mark_node)
+ return false;
+
if (!matches_type_p (expected, actual))
{
error_at (location, "passing %qT to argument %d of %qE, which"
diff --git a/gcc/testsuite/gcc.target/aarch64/pr99381.c b/gcc/testsuite/gcc.target/aarch64/pr99381.c
new file mode 100644
index 0000000..8b4c5b8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr99381.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-march=armv8-a" } */
+/* PR99381: we shouldn't ICE if the user forgets -march=armv8.2-a+sve. */
+
+#include <arm_sve.h>
+_Bool a;
+int main()
+{
+ a = svaddv(svptrue_b8(), svdup_s8(0)); /* { dg-error "ACLE function 'svptrue_b8' requires ISA extension 'sve'" } */
+}