From: Alex Coplan Date: Thu, 4 Mar 2021 14:36:39 +0000 (+0000) Subject: aarch64: Add missing error_mark_node check [PR99381] X-Git-Tag: releases/gcc-10.3.0~228 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6925d4763e469e43b9d06e4a17187215bc03d3c9;p=thirdparty%2Fgcc.git 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. (cherry picked from commit a6bc1680a493de356d6a381718021c6a44401201) --- diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index d1a7e0fc4211..d534ca923d9d 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -1463,6 +1463,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 000000000000..8b4c5b82f685 --- /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 +_Bool a; +int main() +{ + a = svaddv(svptrue_b8(), svdup_s8(0)); /* { dg-error "ACLE function 'svptrue_b8' requires ISA extension 'sve'" } */ +}