https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85213
Bug ID: 85213 Summary: -fsanitize=undefined internal compiler error: in fold_convert_loc, at fold-const.c:2402 Product: gcc Version: 8.0.1 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: vegard.nossum at oracle dot com CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org, marxin at gcc dot gnu.org Target Milestone: --- Input (valid AFAICT): int f(int x) { return (__builtin_expect(({ x != 0; }) ? 0 : 1, 3) == 0) * -1 << 0; } Output: $ cc1plus -O1 -fsanitize=undefined -g int f(int) Analyzing compilation unit output/ice-fold_covert_loc.cc:2:27: internal compiler error: in fold_convert_loc, at fold-const.c:2402 return (__builtin_expect(({ x != 0; }) ? 0 : 1, 3) == 0) * -1 << 0; ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ 0x1fb2e1b fold_convert_loc(unsigned int, tree_node*, tree_node*) /home/vegard/git/gcc/gcc/fold-const.c:2401 0x227d824 gimplify_cond_expr /home/vegard/git/gcc/gcc/gimplify.c:4034 0x222a3a6 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:11391 0x2236ae1 gimplify_stmt(tree_node**, gimple**) /home/vegard/git/gcc/gcc/gimplify.c:6658 0x227cfbe gimplify_cond_expr /home/vegard/git/gcc/gcc/gimplify.c:4022 0x222a3a6 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:11391 0x225b10c gimplify_expr /home/vegard/git/gcc/gcc/gimplify.c:12430 0x22606a8 gimplify_arg(tree_node**, gimple**, unsigned int, bool) /home/vegard/git/gcc/gcc/gimplify.c:3176 0x2262d8b gimplify_call_expr /home/vegard/git/gcc/gcc/gimplify.c:3382 0x222936f gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:11406 0x2227a92 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:12159 0x22234a7 internal_get_tmp_var /home/vegard/git/gcc/gcc/gimplify.c:575 0x222e2e0 get_initialized_tmp_var(tree_node*, gimple**, gimple**, bool) /home/vegard/git/gcc/gcc/gimplify.c:628 0x222e2e0 gimplify_save_expr /home/vegard/git/gcc/gcc/gimplify.c:5931 0x222e2e0 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:11734 0x2227a92 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:12159 0x2227ac0 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:12161 0x227d943 gimplify_cond_expr /home/vegard/git/gcc/gcc/gimplify.c:4063 0x222a3a6 gimplify_expr(tree_node**, gimple**, gimple**, bool (*)(tree_node*), int) /home/vegard/git/gcc/gcc/gimplify.c:11391 0x227c58d gimplify_stmt(tree_node**, gimple**) /home/vegard/git/gcc/gcc/gimplify.c:6658 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Built from r259106. Test case was minimised by C-Reduce. It seems -fsanitize=shift is enough to trigger it. The shift is by 0, though, so it should be valid (even though the shifted value is potentially negative). 7.3.0 seems to accept it just fine.