diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-10-12 14:11:11 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-10-12 14:11:11 +0200 |
commit | b989ffb2937ba4b87423bf43ebe0666dd4b08cea (patch) | |
tree | a62b28b6b368d3dd9aa7109dcae852bd7b6fcbf9 /gcc/genrecog.c | |
parent | 712716d2a09acd2f28dcf86e0da6a37131facfdf (diff) | |
download | gcc-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.c | 15 |
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 " |