http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59891
Bug ID: 59891 Summary: ICE on invalid code (with div-by-zero) at all optimization levels on x86_64-linux-gnu Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: su at cs dot ucdavis.edu The following code causes an ICE when compiled with the current gcc trunk and 4.8 at all the optimization levels on x86_64-linux-gnu in both 32-bit and 64-bit modes. The code causes gcc 4.7 to hang at all optimization levels. It is a regression from 4.6.x. $ gcc-trunk -v Using built-in specs. COLLECT_GCC=gcc-trunk COLLECT_LTO_WRAPPER=/usr/local/gcc-trunk/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../gcc-trunk/configure --prefix=/usr/local/gcc-trunk --enable-languages=c,c++ --disable-werror --enable-multilib Thread model: posix gcc version 4.9.0 20140120 (experimental) [trunk revision 206798] (GCC) $ $ gcc-trunk -O0 small.c small.c: In function ‘main’: small.c:6:28: warning: division by zero [-Wdiv-by-zero] return (0 ? a : 0) ? : 0 % 0; ^ small.c:6:3: internal compiler error: in gimplify_expr, at gimplify.c:8157 return (0 ? a : 0) ? : 0 % 0; ^ 0x806fb8 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc-trunk/gcc/gimplify.c:8157 0x80a139 gimplify_modify_expr ../../gcc-trunk/gcc/gimplify.c:4493 0x80a139 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc-trunk/gcc/gimplify.c:7441 0x80ec18 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc-trunk/gcc/gimplify.c:5334 0x810802 gimplify_and_add(tree_node*, gimple_statement_base**) ../../gcc-trunk/gcc/gimplify.c:384 0x811da0 gimplify_return_expr ../../gcc-trunk/gcc/gimplify.c:1234 0x808557 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc-trunk/gcc/gimplify.c:7688 0x80ec18 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc-trunk/gcc/gimplify.c:5334 0x80fe13 gimplify_bind_expr ../../gcc-trunk/gcc/gimplify.c:1072 0x8082d0 gimplify_expr(tree_node**, gimple_statement_base**, gimple_statement_base**, bool (*)(tree_node*), int) ../../gcc-trunk/gcc/gimplify.c:7638 0x80ec18 gimplify_stmt(tree_node**, gimple_statement_base**) ../../gcc-trunk/gcc/gimplify.c:5334 0x80ed6a gimplify_body(tree_node*, bool) ../../gcc-trunk/gcc/gimplify.c:8548 0x80f3b1 gimplify_function_tree(tree_node*) ../../gcc-trunk/gcc/gimplify.c:8701 0x69ec97 analyze_function ../../gcc-trunk/gcc/cgraphunit.c:649 0x6a0724 analyze_functions ../../gcc-trunk/gcc/cgraphunit.c:1017 0x6a1660 finalize_compilation_unit() ../../gcc-trunk/gcc/cgraphunit.c:2310 0x55b802 c_write_global_declarations() ../../gcc-trunk/gcc/c/c-decl.c:10401 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <http://gcc.gnu.org/bugs.html> for instructions. $ ------------------------- unsigned int a; int main () { return (0 ? a : 0) ? : 0 % 0; }