This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix PR middle-end/44993


On Wed, Jul 28, 2010 at 12:44 AM, Eric Botcazou <ebotcazou@adacore.com> wrote:
> This is the bootstrap failure on SPARC64/Linux introduced by the fix for PR
> middle-end/44790, which was a bootstrap failure on IA-64/HP-UX introduced by
> the mem-ref2 merge.
>
> The fix introduced a non-canonical expansion for MEM_REF via POINTER_PLUS_EXPR
> which bypasses checks for valid addresses in the SPARC back-end:
>
> ?name = MEM[(struct
> exp_ch3__make_predefined_primitive_specs__B_99__stream_op_tss_names___PAD
> *)D.14526_1156 + 4294967296B];
>
> is expanded into
>
> ? ? ? ?sethi ? %hi(stream_op_tss_names.6060+4294967296), %l2
> ? ? ? ?or ? ? ?%l2, %lo(stream_op_tss_names.6060+4294967296), %l2
>
> which overflows since sethi is a 32-bit operator.
>
> This can very likely happen for other back-ends as well so I think that the
> best approach is to fix PR middle-end/44790 more canonically. ?The problem
> was that:
>
> op0 = expand_expr (base, NULL_RTX, address_mode, EXPAND_NORMAL);
>
> assumed that op0 was generated in address_mode; this isn't guaranteed so an
> explicit address conversion is required:
>
> op0 = convert_memory_address_addr_space (address_mode, op0, as);
>
>
> Bootstrapped/regtested on SPARC64/Linux, applied on the mainline as obvious.
>
>
> 2010-07-28 ?Eric Botcazou ?<ebotcazou@adacore.com>
>
> ? ? ? ?PR middle-end/44790
> ? ? ? ?PR middle-end/44993
> ? ? ? ?* expr.c (expand_expr_real_1) <MEM_REF>: Revert latest change. ?Make
> ? ? ? ?sure the base has address_mode before adding the offset.
>

This patch caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45670


-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]