Consider associate_trees being called with

(gdb) call debug_tree(t1)
 <integer_cst 0xb7c8b450 type <integer_type 0xb7c9b2e0 unsigned int> constant
invariant 4294967295>
(gdb) call debug_tree(t2)
 <integer_cst 0xb7c8ba38 type <integer_type 0xb7c9b284 int> constant invariant
1>
(gdb) call debug_tree(type)
 <integer_type 0xb7c9b284 int sizes-gimplified public SI
    size <integer_cst 0xb7c8b3f0 type <integer_type 0xb7c9b05c bit_size_type>
constant invariant 32>
    unit size <integer_cst 0xb7c8b180 type <integer_type 0xb7c9b000 unsigned
int> constant invariant 4>
    align 32 symtab 0 alias set -1 precision 32 min <integer_cst 0xb7c8b3a8
-2147483648> max <integer_cst 0xb7c8b3c0 2147483647>
    pointer_to_this <pointer_type 0xb7c9bc38>>
(gdb) print code
$15 = PLUS_EXPR

we return via

  return fold_build2 (code, type, fold_convert (type, t1),
                      fold_convert (type, t2));

where fold_build2 gets called with

(gdb) down
#1  0x083b401f in fold_build2_stat (code=PLUS_EXPR, type=0xb7c9b284, 
    op0=0xb7d26558, op1=0xb7c8ba38)
    at /space/rguenther/src/svn/gcc/gcc/fold-const.c:11134
11134     tem = fold_binary (code, type, op0, op1);
(gdb) call debug_tree(op0)
 <integer_cst 0xb7d26558 type <integer_type 0xb7c9b284 int> constant invariant
public static overflow -1>
(gdb) call debug_tree(op1)
 <integer_cst 0xb7c8ba38 type <integer_type 0xb7c9b284 int> constant invariant
1>


-- 
           Summary: fold-const.c:associate_trees produces constants with
                    overflow flag set
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rguenth at gcc dot gnu dot org


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

Reply via email to