typedef signed long long int WordS64; typedef unsigned long long int Word64;
int foo (Word64 *p) { while (1) { WordS64 c = 0x1llu; WordS64 x = *p; if (c >= 0) { if (x > (WordS64) 0x7FFFFFFFFFFFFFFFll - c) return 6; } else if (x < (WordS64) 0x8000000000000000ll - c) return 7; p++; } } ICEs at -O1 or -O2 in chain_of_csts_start, which is called on <nop_expr 0x2aaaae936d40 type <integer_type 0x2aaaae93b790 long long int sizes-gimplified DI size <integer_cst 0x2aaaae92bdb0 constant invariant 64> unit size <integer_cst 0x2aaaae92bde0 constant invariant 8> align 64 symtab 0 alias set 3 precision 64 min <integer_cst 0x2aaaae92bf00 -9223372036854775808> max <integer_cst 0x2aaaae92bf30 9223372036854775807> pointer_to_this <pointer_type 0x2aaaae9e1840>> arg 0 <ssa_name 0x2aaaaeafb780 type <integer_type 0x2aaaaeaf69a0 WordS64 sizes-gimplified public DI size <integer_cst 0x2aaaae92bdb0 64> unit size <integer_cst 0x2aaaae92bde0 8> align 64 symtab 0 alias set -1 precision 64 min <integer_cst 0x2aaaae92bf00 -9223372036854775808> max <integer_cst 0x2aaaae92bf30 9223372036854775807>> var <var_decl 0x2aaaaeaf6d10 x> def_stmt <modify_expr 0x2aaaae931960> version 6>> but assumes the argument is SSA_NAME. -- Summary: [4.1/4.2 Regression] ICE in chain_of_csts_start Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32694