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: [PATCH] Fix PR53501


On Wed, Oct 31, 2012 at 3:53 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Oct 31, 2012 at 7:29 AM, Eric Botcazou <ebotcazou@adacore.com> wrote:
>>
>> > It failed with revision 188008.
>>
>> OK, thanks.  So the testcase never compiled on the trunk (except for about
>> 24
>> hours between 188009 & 188118) or did it compile before 188008 at some
>> point?
>>
>> --
>> Eric Botcazou
>
> It was OK until revision 187042:
>
>     2012-05-02  Richard Guenther  <rguenther@suse.de>
>
>         * tree.c (valid_constant_size_p): New function.
>         * tree.h (valid_constant_size_p): Declare.
>         * cfgexpand.c (expand_one_var): Adjust check for too large
>         variables by using valid_constant_size_p.
>         * varasm.c (assemble_variable): Likewise.
>
>         c/
>         * c-decl.c (grokdeclarator): Properly check for sizes that
>         cover more than half of the address-space.
>
>         cp/
>         * decl.c (grokdeclarator): Properly check for sizes that
>         cover more than half of the address-space.
>
>     2012-05-02  Richard Guenther  <rguenther@suse.de>
>
>         * fold-const.c (div_if_zero_remainder): sizetypes no longer
>         sign-extend.
>         (int_const_binop_1): New worker for int_const_binop with
>         overflowable parameter.  Pass it through
>         to force_fit_type_double.
>         (int_const_binop): Wrap around int_const_binop_1 with overflowable
>         equal to one.
>         (size_binop_loc): Call int_const_binop_1 with overflowable equal
>         to minus one, forcing overflow detection for even unsigned types.
>         (extract_muldiv_1): Remove bogus TYPE_IS_SIZETYPE special-casing.
>         (fold_binary_loc): Call try_move_mult_to_index with signed offset.
>         * stor-layout.c (initialize_sizetypes): sizetypes no longer
>         sign-extend.
>         (layout_type): For zero-sized arrays ignore overflow on the
>         size calculations.
>         * tree-ssa-ccp.c (bit_value_unop_1): Likewise.
>         (bit_value_binop_1): Likewise.
>         * tree.c (double_int_to_tree): Likewise.
>         (double_int_fits_to_tree_p): Likewise.
>         (force_fit_type_double): Likewise.
>         (host_integerp): Likewise.
>         (int_fits_type_p): Likewise.
>         * varasm.c (output_constructor_regular_field): Sign-extend the
>         field-offset to cater for negative offsets produced by the Ada frontend.
>         * omp-low.c (extract_omp_for_data): Convert the loop step to
>         signed for pointer adjustments.
>
> which gave:
>
> /export/build/gnu/gcc/build-x86_64-linux/gcc/xgcc
> -B/export/build/gnu/gcc/build-x86_64-linux/gcc/ -O3 -Wall -mx32
> -maddress-mode=long -fPIC -S x.i
> x.i: In function ‘dl_start’:
> x.i:30:1: error: unrecognizable insn:
>  }
>  ^
> (insn 54 53 55 7 (set (reg:SI 108)
>         (const:SI (plus:SI (symbol_ref:SI ("_dl_rtld_map") [flags
> 0x42] <var_decl 0x7f02997bb140 _dl_rtld_map>)
>                 (const_int -1073742800 [0xffffffffbffffc30])))) x.i:22 -1
>      (nil))
> x.i:30:1: internal compiler error: in extract_insn, at recog.c:2130
>  }
>  ^
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <http://gcc.gnu.org/bugs.html> for instructions.
>

It looks like we are using unsigned type for array index:

(gdb)  list
2163		tree element = TREE_TYPE (type);
2164	
2165		build_pointer_type (element);
2166	
2167		/* We need to know both bounds in order to compute the size.  */
2168		if (index && TYPE_MAX_VALUE (index) && TYPE_MIN_VALUE (index)
2169		    && TYPE_SIZE (element))
2170		  {
2171		    tree ub = TYPE_MAX_VALUE (index);
2172		    tree lb = TYPE_MIN_VALUE (index);
(gdb) call debug_tree (index)
 <integer_type 0x7ffff1ab6000
    type <integer_type 0x7ffff199d000 sizetype public unsigned sizetype SI
        size <integer_cst 0x7ffff1989d40 constant 32>
        unit size <integer_cst 0x7ffff1989d60 constant 4>
        align 32 symtab 0 alias set -1 canonical type 0x7ffff199d000
precision 32 min <integer_cst 0x7ffff1989d80 0> max <integer_cst
0x7ffff1989000 4294967295>>
    SI size <integer_cst 0x7ffff1989d40 32> unit size <integer_cst
0x7ffff1989d60 4>
    align 32 symtab 0 alias set -1 canonical type 0x7ffff1ab6000
precision 32 min <integer_cst 0x7ffff1989d80 0> max <integer_cst
0x7ffff1aa3260 33>>
(gdb)


-- 
H.J.


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