gcc x86_64, top of the trunk. > cat f.cpp extern unsigned int var_60, var_110; void foo() { var_110 = (!~0 >= unsigned(0 < 0)) << var_60; } > g++ -fsanitize=undefined -w -O0 -c f.cpp f.cpp: In function ‘void foo()’: f.cpp:2:6: error: type mismatch in shift expression void foo() { ^~~ int unsigned int unsigned int _2 = 1 << var_60.0; f.cpp:2:6: internal compiler error: verify_gimple failed <...>
Dup. *** This bug has been marked as a duplicate of bug 80403 ***
Author: jakub Date: Wed Apr 12 18:08:29 2017 New Revision: 246881 URL: https://gcc.gnu.org/viewcvs?rev=246881&root=gcc&view=rev Log: PR sanitizer/80403 PR sanitizer/80404 PR sanitizer/80405 * fold-const.c (fold_ternary_loc): Use op1 instead of arg1 as argument to fold_build2_loc. Convert TREE_OPERAND (tem, 0) to type. Use op0 instead of fold_convert_loc (loc, type, arg0). * g++.dg/ubsan/pr80403.C: New test. * g++.dg/ubsan/pr80404.C: New test. * g++.dg/ubsan/pr80405.C: New test. Added: trunk/gcc/testsuite/g++.dg/ubsan/pr80403.C trunk/gcc/testsuite/g++.dg/ubsan/pr80404.C trunk/gcc/testsuite/g++.dg/ubsan/pr80405.C Modified: trunk/gcc/ChangeLog trunk/gcc/fold-const.c trunk/gcc/testsuite/ChangeLog