From: Roger Sayle Date: Wed, 16 Mar 2005 15:23:40 +0000 (+0000) Subject: re PR target/18371 (array subscript out of range in gcc sources) X-Git-Tag: releases/gcc-3.4.4~154 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9f763e02013b8cd3823852460f60d1fe7baa9e9;p=thirdparty%2Fgcc.git re PR target/18371 (array subscript out of range in gcc sources) PR target/18371 Backport from mainline 2004-12-19 Steven Bosscher * config/i386/i386.c (ix86_split_to_parts): Use an array with four elements for decoding a CONST_DOUBLE on 64 bits targets. From-SVN: r96558 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b69bef99ef8..7fdc8e0eb2bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-03-16 Roger Sayle + + PR target/18371 + Backport from mainline + 2004-12-19 Steven Bosscher + * config/i386/i386.c (ix86_split_to_parts): Use an array with + four elements for decoding a CONST_DOUBLE on 64 bits targets. + 2005-03-14 Alan Modra * config.gcc: Remove excess indentation. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index ff0c1617b4ce..9504583b85c0 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -10646,10 +10646,11 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode) else if (GET_CODE (operand) == CONST_DOUBLE) { REAL_VALUE_TYPE r; - long l[3]; + long l[4]; REAL_VALUE_FROM_CONST_DOUBLE (r, operand); real_to_target (l, &r, mode); + /* Do not use shift by 32 to avoid warning on 32bit systems. */ if (HOST_BITS_PER_WIDE_INT >= 64) parts[0] @@ -10659,6 +10660,7 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode) DImode); else parts[0] = immed_double_const (l[0], l[1], DImode); + if (upper_mode == SImode) parts[1] = gen_int_mode (l[2], SImode); else if (HOST_BITS_PER_WIDE_INT >= 64)