https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85794
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Invalid GIMPLE. We have vect_patt_18.16_33 = VEC_COND_EXPR <_24 != vect_cst__23, vect_cst__31, vect_cst__32>; with <ne_expr 0x7ffff66d27d0 type <vector_type 0x7ffff6a7f5e8 type <boolean_type 0x7ffff6a7f3f0 DI size <integer_cst 0x7ffff6894d08 constant 64> unit-size <integer_cst 0x7ffff6894d20 constant 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ffff6a7f3f0 precision:64 min <integer_cst 0x7ffff66c4ac8 -9223372036854775808> max <integer_cst 0x7ffff66c4b88 9223372036854775807>> BLK size <integer_cst 0x7ffff6894d08 64> unit-size <integer_cst 0x7ffff6894d20 8> align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ffff6a7f5e8 nunits:1> arg:0 <ssa_name 0x7ffff689ee58 type <integer_type 0x7ffff68a57e0 long unsigned int public unsigned DI size <integer_cst 0x7ffff6894d08 64> unit-size <integer_cst 0x7ffff6894d20 8> ... arg:1 <ssa_name 0x7ffff689ee10 type <vector_type 0x7ffff6992c78 type <integer_type 0x7ffff68a57e0 long unsigned int> the GIMPLE verifier should also catch this. Testing Index: gcc/tree-cfg.c =================================================================== --- gcc/tree-cfg.c (revision 260280) +++ gcc/tree-cfg.c (working copy) @@ -4137,6 +4137,12 @@ verify_gimple_assign_ternary (gassign *s } /* Fallthrough. */ case COND_EXPR: + if (!is_gimple_val (rhs1) + && verify_gimple_comparison (TREE_TYPE (rhs1), + TREE_OPERAND (rhs1, 0), + TREE_OPERAND (rhs1, 1), + TREE_CODE (rhs1))) + return true; if (!useless_type_conversion_p (lhs_type, rhs2_type) || !useless_type_conversion_p (lhs_type, rhs3_type)) { which will result in t.c: In function ‘fn1’: t.c:3:6: error: mismatching comparison operand types void fn1() { ^~~ long unsigned int vector(1) long unsigned int vect_patt_19.16_32 = VEC_COND_EXPR <_9 != vect_cst__28, vect_cst__12, vect_cst__21>; t.c:3:6: error: mismatching comparison operand types long unsigned int vector(1) long unsigned int vect_patt_19.16_33 = VEC_COND_EXPR <_64 != vect_cst__28, vect_cst__12, vect_cst__21>; during GIMPLE pass: vect t.c:3:6: internal compiler error: verify_gimple failed