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

             Bug #: 53390
           Summary: ICE: tree check: expected integer_cst, have nop_expr
                    in vect_compute_data_ref_alignmen on 32-bit x86 host
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: g...@intrepid.com
                CC: phhargr...@lbl.gov
              Host: CentOS 6 x86-32
            Target: x86-32


Built on x86-32 with GCC 4.8 trunk version 187616 (2012-05-16), the attached
test case fails with following internal error (with checks enabled).

test.i: In function ‘foo’:
test.i:10:6: internal compiler error: tree check: expected integer_cst, have
nop_expr in tree_int_cst_sgn, at tree.c:6601

Back trace:

#0  internal_error (gmsgid=0x8f57f68 "tree check: %s, have %s in %s, at %s:%d")
    at gcc/diagnostic.c:955
#1  0x089e6b71 in tree_check_failed (node=0xb7c8a378, 
    file=0x8f57148 "gcc/tree.c", line=6601, 
    function=0x8f5958c "tree_int_cst_sgn")
    at gcc/tree.c:8886
#2  0x089d7c50 in tree_int_cst_sgn (t=0xb7c8a378)
    at gcc/tree.c:6601
#3  0x089d7108 in tree_int_cst_lt (t1=0xb7c8a378, t2=0xb7bec594)
    at gcc/tree.c:6503
#4  0x089d7634 in tree_int_cst_compare (t1=0xb7c8a378, t2=0xb7bec594)
    at gcc/tree.c:6525
#5  0x08e2abda in vect_compute_data_ref_alignment (dr=0x92a3768)
    at gcc/tree-vect-data-refs.c:923
#6  0x08e2ae38 in vect_compute_data_refs_alignment (loop_vinfo=0x92a37e0, 
    bb_vinfo=0x0) at gcc/tree-vect-data-refs.c:976
#7  0x08e2d99f in vect_analyze_data_refs_alignment (loop_vinfo=0x92a37e0, 
    bb_vinfo=0x0)
    at gcc/tree-vect-data-refs.c:2074

(gdb) f 5
#5  0x08e2abda in vect_compute_data_ref_alignment (dr=0x92a3768)
    at gcc/tree-vect-data-refs.c:923
923       if (tree_int_cst_compare (DR_STEP (dr), size_zero_node) < 0)
(gdb) l
918                       && DECL_ALIGN (base) >= TYPE_ALIGN (vectype)));
919
920       /* If this is a backward running DR then first access in the larger
921          vectype actually is N-1 elements before the address in the DR.
922          Adjust misalign accordingly.  */
923       if (tree_int_cst_compare (DR_STEP (dr), size_zero_node) < 0)
924         {
925           tree offset = ssize_int (TYPE_VECTOR_SUBPARTS (vectype) - 1);
926           /* DR_STEP(dr) is the same as -TYPE_SIZE of the scalar type,
927              otherwise we wouldn't be here.  */
(gdb) down
#4  0x089d7634 in tree_int_cst_compare (t1=0xb7c8a378, t2=0xb7bec594)
    at gcc/tree.c:6525
6525      if (tree_int_cst_lt (t1, t2))
(gdb) p t1
$1 = (const_tree) 0xb7c8a378
(gdb) pt
 <nop_expr 0xb7c8a378
    type <integer_type 0xb7bff0c0 ssizetype public SI
        size <integer_cst 0xb7bec55c constant 32>
        unit size <integer_cst 0xb7bec578 constant 4>
        align 32 symtab 0 alias set -1 canonical type 0xb7bff0c0 precision 32
min <integer_cst 0xb7bec620 -2147483648> max <integer_cst 0xb7bec63c
2147483647>>

    arg 0 <mult_expr 0xb7c87a80
        type <integer_type 0xb7bff3c0 unsigned int public unsigned SI size
<integer_cst 0xb7bec55c 32> unit size <integer_cst 0xb7bec578 4>
            align 32 symtab 0 alias set -1 canonical type 0xb7bff3c0 precision
32 min <integer_cst 0xb7bec86c 0> max <integer_cst 0xb7bec850 4294967295>
            pointer_to_this <pointer_type 0xb7c0b300>>

        arg 0 <nop_expr 0xb7c8a348 type <integer_type 0xb7bff3c0 unsigned int>

            arg 0 <ssa_name 0xb7c70d3c type <integer_type 0xb7bff360 int>
                visited var <var_decl 0xb7c81cc0 pretmp.12>def_stmt
pretmp.12_42 = var2;

                version 42>>
        arg 1 <integer_cst 0xb7c7fa64 constant 2>>>

I was unable to cause this to fail on an x86_64 *host* compiling with -m32, but
perhaps needed to try some other configuration options.  The failing compiler
above was built on an x86-32 (CentOS 6) host with --disable-bootstrap and
--enable-checking.

Reply via email to