https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82976
--- Comment #5 from Janne Blomqvist <jb at gcc dot gnu.org> --- So the problem is the logical(kind=1) one, it should be the same type as the LHS. It seems it originates from (from .003t.original): logical(kind=4) D.3603; ... D.3603 = (struct test_typ[0:] * restrict) conc.data == 0B; Then in the .177t.thread3 dump this has become: _15 = _34 == _6; Then finally in the 178t.dom3 dump with -fdump-tree-all-details (this is the pass where it ICE's): Optimizing statement _15 = _34 == _6; Replaced '_34' with variable '_13' Replaced '_6' with constant '&A.7' gimple_simplified to _15 = 0; Folded to: _15 = 0; LKUP STMT _15 = 0 ==== ASGN _15 = 0 I have gone through uses of EQ_EXPR (and NE_EXPR, and boolean_type_node, and boolean_true_node, and boolean_false_node) in the frontend and I haven't found a place where it would use boolean_type_node (i.e. logical(kind=1) instead of logical_type_node (logical(kind=4)). So at the moment I'm a bit stuck. Does the above give you any kind of hint what the problem might be?