This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: RFA: Fix type incompatibility in get_addr_base_and_unit_offset_1
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>, Richard Sandiford <rdsandiford at googlemail dot com>
- Date: Tue, 13 May 2014 10:52:08 +0200
- Subject: Re: RFA: Fix type incompatibility in get_addr_base_and_unit_offset_1
- Authentication-results: sourceware.org; auth=none
- References: <87mwep1lxh dot fsf at talisman dot default>
On Sat, May 10, 2014 at 9:19 PM, Richard Sandiford
<rdsandiford@googlemail.com> wrote:
> get_addr_base_and_unit_offset_1 and get_ref_base_and_extent have similar
> code to handle array indices. The code in tree-dfa.c extends from the
> precision of the index, as before wide-int, but the tree-dfa.h version
> was updated in a way that could introduce a type inconsistency (flagged
> by a patch I'm working on). This version makes them the same again,
> as per the patch for PR59356.
>
> Tested on x86_64-limux-gnu. OK to install?
Ok.
Thanks,
Richard.
> Thanks,
> Richard
>
>
> gcc/
> * tree-dfa.h (get_addr_base_and_unit_offset_1): Update array index
> calculation to match get_ref_base_and_extent.
>
> Index: gcc/tree-dfa.h
> ===================================================================
> --- gcc/tree-dfa.h 2014-05-10 14:02:40.112187344 +0100
> +++ gcc/tree-dfa.h 2014-05-10 14:02:50.414275258 +0100
> @@ -103,7 +103,8 @@ get_addr_base_and_unit_offset_1 (tree ex
> TREE_CODE (unit_size) == INTEGER_CST))
> {
> offset_int woffset
> - = offset_int::from (wi::sub (index, low_bound), SIGNED);
> + = wi::sext (wi::to_offset (index) - wi::to_offset (low_bound),
> + TYPE_PRECISION (TREE_TYPE (index)));
> woffset *= wi::to_offset (unit_size);
> byte_offset += woffset.to_shwi ();
> }