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

Reply via email to