summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-15 20:41:03 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-15 20:41:03 +0000
commitf8eca087325a6c9a6997aa398fa5fdf79f17e96e (patch)
treef3b03f728a76b77ce4adaca3c4525a06bed79409 /gcc/combine.c
parentc360ad02a5600387db496d7cf9d0ce1de82e0ad7 (diff)
downloadgcc-f8eca087325a6c9a6997aa398fa5fdf79f17e96e.tar.gz
PR middle-end/26300
* combine.c (make_extraction): Bail out if ORIG_POS is negative. * gcc.c-torture/compile/20060215-1.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@111116 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index d4ea6897c81..96ebd208a82 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -6249,6 +6249,9 @@ make_extraction (enum machine_mode mode, rtx inner, HOST_WIDE_INT pos,
|| orig_pos + len > GET_MODE_BITSIZE (wanted_inner_mode)))
return 0;
+ if (orig_pos < 0)
+ return 0;
+
inner = force_to_mode (inner, wanted_inner_mode,
pos_rtx
|| len + orig_pos >= HOST_BITS_PER_WIDE_INT