target: m32c-elf
test case: cc1 -O3 -mcpu=m32c dj.c

--------------------
void
cyg_hal_plf_serial_write(void* __ch_data, const unsigned char* __buf, 
                         unsigned long __len)
{
    while(__len-- > 0)
        cyg_hal_plf_serial_putc(__ch_data, *__buf++);
}
--------------------

We get here, and fold_binary returns NULL:
13560     tem = fold_binary (code, type, op0, op1);
13561     if (!tem)
13562       tem = build2_stat (code, type, op0, op1 PASS_MEM_STAT);

so it calls build2_stat, but fails at this assert:
3108      if ((code == MINUS_EXPR || code == PLUS_EXPR || code == MULT_EXPR)
3109          && arg0 && arg1 && tt && POINTER_TYPE_P (tt))
3110        gcc_assert (TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == 
INTEGER_CST);

traceback, tt, and ops follow.  Why is this going wrong?  Note that
m32c pointers are PSImode (24 bits), int/size_t are 16 bits, and long
is 32 bits.

#1  0x08827a01 in build2_stat (code=PLUS_EXPR, tt=0xb7f5d2f4, arg0=0xb7f5f6e0, 
arg1=0xb7f61c30)
    at ../../gcc/gcc/tree.c:3110

#2  0x08387ccb in fold_build2_stat (code=PLUS_EXPR, type=0xb7f5d2f4, 
op0=0xb7f5f6e0, 
    op1=0xb7f61c30) at ../../gcc/gcc/fold-const.c:13562

#3  0x0834d43b in fold_binary (code=PLUS_EXPR, type=0xb7f5d2f4, op0=0xb7f61c30, 
op1=0xb7f5f6e0)
    at ../../gcc/gcc/fold-const.c:9555
#4  0x08387ca2 in fold_build2_stat (code=PLUS_EXPR, type=0xb7f5d2f4, 
op0=0xb7f61c30, 
    op1=0xb7f5f6e0) at ../../gcc/gcc/fold-const.c:13560
#5  0x086d3bc2 in create_mem_ref (bsi=0xbfcc617c, type=0xb7f5d288, 
addr=0xbfcc6188)
    at ../../gcc/gcc/tree-ssa-address.c:641
#6  0x0874bf9b in rewrite_use_address (data=0xbfcc62b8, use=0x8e76510, 
cand=0x8ecd640)
    at ../../gcc/gcc/tree-ssa-loop-ivopts.c:5089
#7  0x0874c29f in rewrite_use (data=0xbfcc62b8, use=0x8e76510, cand=0x8ecd640)
    at ../../gcc/gcc/tree-ssa-loop-ivopts.c:5148
#8  0x0874c350 in rewrite_uses (data=0xbfcc62b8) at 
../../gcc/gcc/tree-ssa-loop-ivopts.c:5177
#9  0x0874ccb4 in tree_ssa_iv_optimize_loop (data=0xbfcc62b8, loop=0xb7f6833c)
    at ../../gcc/gcc/tree-ssa-loop-ivopts.c:5347
#10 0x0874cd4d in tree_ssa_iv_optimize () at 
../../gcc/gcc/tree-ssa-loop-ivopts.c:5380
#11 0x08760d74 in tree_ssa_loop_ivopts () at ../../gcc/gcc/tree-ssa-loop.c:549
#12 0x084811e2 in execute_one_pass (pass=0x8c3dfc0) at 
../../gcc/gcc/passes.c:1116
#13 0x0848132e in execute_pass_list (pass=0x8c3dfc0) at 
../../gcc/gcc/passes.c:1169
#14 0x0848134a in execute_pass_list (pass=0x8c3dc00) at 
../../gcc/gcc/passes.c:1170
#15 0x0848134a in execute_pass_list (pass=0x8c3d400) at 
../../gcc/gcc/passes.c:1170
#16 0x086810ea in tree_rest_of_compilation (fndecl=0xb7f5bb80) at 
../../gcc/gcc/tree-optimize.c:404
#17 0x088a3a19 in cgraph_expand_function (node=0xb7f5bc80) at 
../../gcc/gcc/cgraphunit.c:1070
#18 0x088a3c13 in cgraph_expand_all_functions () at 
../../gcc/gcc/cgraphunit.c:1139
#19 0x088a422e in cgraph_optimize () at ../../gcc/gcc/cgraphunit.c:1346
#20 0x08076156 in c_write_global_declarations () at ../../gcc/gcc/c-decl.c:8077
#21 0x085f66dd in compile_file () at ../../gcc/gcc/toplev.c:1052
#22 0x085f81b5 in do_compile () at ../../gcc/gcc/toplev.c:2235
#23 0x085f8217 in toplev_main (argc=4, argv=0xbfcc6644) at 
../../gcc/gcc/toplev.c:2267
#24 0x08121e7a in main (argc=...) at ../../gcc/gcc/main.c:35


[ gdb ] call debug_tree(tt)
 <pointer_type 0xb7f5d2f4
    type <integer_type 0xb7f5d288 unsigned char readonly unsigned string-flag QI
        size <integer_cst 0xb7eee2d8 constant invariant 8>
        unit size <integer_cst 0xb7eee2f4 constant invariant 1>
        align 8 symtab 0 alias set -1 canonical type 0xb7f5d288 precision 8 min 
<integer_cst 0xb7eee310 0> max <integer_cst 0xb7eee32c 255>
        pointer_to_this <pointer_type 0xb7f5d2f4>>
    public unsigned PSI
    size <integer_cst 0xb7eee4d0 type <integer_type 0xb7efc06c bit_size_type> 
constant invariant 32>
    unit size <integer_cst 0xb7eee24c type <integer_type 0xb7efc000 long 
unsigned int> constant invariant 4>
    align 8 symtab 0 alias set -1 canonical type 0xb7f5d2f4>

[ gdb ] call debug_tree(arg0)
 <nop_expr 0xb7f5f6e0
    type <pointer_type 0xb7f5d2f4
        type <integer_type 0xb7f5d288 unsigned char readonly unsigned 
string-flag QI
            size <integer_cst 0xb7eee2d8 constant invariant 8>
            unit size <integer_cst 0xb7eee2f4 constant invariant 1>
            align 8 symtab 0 alias set -1 canonical type 0xb7f5d288 precision 8 
min <integer_cst 0xb7eee310 0> max <integer_cst 0xb7eee32c 255>
            pointer_to_this <pointer_type 0xb7f5d2f4>>
        public unsigned PSI
        size <integer_cst 0xb7eee4d0 constant invariant 32>
        unit size <integer_cst 0xb7eee24c constant invariant 4>
        align 8 symtab 0 alias set -1 canonical type 0xb7f5d2f4>
   
    arg 0 <ssa_name 0xb7f61b94
        type <integer_type 0xb7efc438 long unsigned int public unsigned SI size 
<integer_cst 0xb7eee4d0 32> unit size <integer_cst 0xb7eee24c 4>
            align 8 symtab 0 alias set -1 canonical type 0xb7efc438 precision 
32 min <integer_cst 0xb7eee4ec 0> max <integer_cst 0xb7eee4b4 4294967295>>
        var <var_decl 0xb7f6861c ivtmp.19> def_stmt <phi_node 0xb7f69000>
        version 1>>

[ gdb ] call debug_tree(arg1)
 <ssa_name 0xb7f61c30
    type <pointer_type 0xb7f5d2f4
        type <integer_type 0xb7f5d288 unsigned char readonly unsigned 
string-flag QI
            size <integer_cst 0xb7eee2d8 constant invariant 8>
            unit size <integer_cst 0xb7eee2f4 constant invariant 1>
            align 8 symtab 0 alias set -1 canonical type 0xb7f5d288 precision 8 
min <integer_cst 0xb7eee310 0> max <integer_cst 0xb7eee32c 255>
            pointer_to_this <pointer_type 0xb7f5d2f4>>
        public unsigned PSI
        size <integer_cst 0xb7eee4d0 constant invariant 32>
        unit size <integer_cst 0xb7eee24c constant invariant 4>
        align 8 symtab 0 alias set -1 canonical type 0xb7f5d2f4>
    volatile visited var <parm_decl 0xb7ef70fc __buf> def_stmt <nop_expr 
0xb7f5f240>
    version 4
    ptr-info 0xb7ef3f90>

Reply via email to