aboutsummaryrefslogtreecommitdiff
path: root/gcc/genrecog.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-10-12 14:11:11 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2017-10-12 14:11:11 +0200
commitb989ffb2937ba4b87423bf43ebe0666dd4b08cea (patch)
treea62b28b6b368d3dd9aa7109dcae852bd7b6fcbf9 /gcc/genrecog.c
parent712716d2a09acd2f28dcf86e0da6a37131facfdf (diff)
downloadgcc-b989ffb2937ba4b87423bf43ebe0666dd4b08cea.zip
gcc-b989ffb2937ba4b87423bf43ebe0666dd4b08cea.tar.gz
gcc-b989ffb2937ba4b87423bf43ebe0666dd4b08cea.tar.bz2
genrecog.c (validate_pattern): For VEC_SELECT verify that CONST_INT selectors are 0 to GET_MODE_NUNITS (imode) - 1.
* genrecog.c (validate_pattern): For VEC_SELECT verify that CONST_INT selectors are 0 to GET_MODE_NUNITS (imode) - 1. From-SVN: r253676
Diffstat (limited to 'gcc/genrecog.c')
-rw-r--r--gcc/genrecog.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index 902762f..b3d02d7 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -751,6 +751,21 @@ validate_pattern (rtx pattern, md_rtx_info *info, rtx set, int set_code)
error_at (info->loc,
"vec_select parallel with %d elements, expected %d",
XVECLEN (XEXP (pattern, 1), 0), expected);
+ else if (VECTOR_MODE_P (imode))
+ {
+ unsigned int nelems = GET_MODE_NUNITS (imode);
+ int i;
+ for (i = 0; i < expected; ++i)
+ if (CONST_INT_P (XVECEXP (XEXP (pattern, 1), 0, i))
+ && (UINTVAL (XVECEXP (XEXP (pattern, 1), 0, i))
+ >= nelems))
+ error_at (info->loc,
+ "out of bounds selector %u in vec_select, "
+ "expected at most %u",
+ (unsigned)
+ UINTVAL (XVECEXP (XEXP (pattern, 1), 0, i)),
+ nelems - 1);
+ }
}
if (imode != VOIDmode && !VECTOR_MODE_P (imode))
error_at (info->loc, "%smode of first vec_select operand is not a "