On Wed, Oct 31, 2012 at 3:53 PM, H.J. Lu <[email protected]> wrote:
> On Wed, Oct 31, 2012 at 7:29 AM, Eric Botcazou <[email protected]> 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 <[email protected]>
>
> * 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 <[email protected]>
>
> * 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.