From 0343822bd86552c0264836a6d6f0927bf39c87b1 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 19 Nov 2012 23:28:04 +0000 Subject: re PR middle-end/55359 (ICE in simplify_subreg accessing an unaligned subvector) gcc/ PR middle-end/55359 * simplify-rtx.c (simplify_subreg): Return null for invalid offsets. gcc/testsuite/ * gcc.target/i386/pr55359.c: New test. From-SVN: r193640 --- gcc/simplify-rtx.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'gcc/simplify-rtx.c') diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 18223a8..46d9e8a 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -5685,8 +5685,11 @@ simplify_subreg (enum machine_mode outermode, rtx op, gcc_assert (GET_MODE (op) == innermode || GET_MODE (op) == VOIDmode); - gcc_assert ((byte % GET_MODE_SIZE (outermode)) == 0); - gcc_assert (byte < GET_MODE_SIZE (innermode)); + if ((byte % GET_MODE_SIZE (outermode)) != 0) + return NULL_RTX; + + if (byte >= GET_MODE_SIZE (innermode)) + return NULL_RTX; if (outermode == innermode && !byte) return op; -- cgit v1.1