https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82285
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- Simplified test-case: $ cat ~/Programming/testcases/pr82285.c #define MAX (16) enum tst { first = 0, second = 1 }; int main (void) { enum tst data[MAX]; for (unsigned i = 0; i < MAX; i++) data[i] = (i < 5 ? second : first); if (data[2] != second) { __builtin_abort (); } return 0; } Problem is that vectorizes does: vect_cst__20 = { 4, 4, 4, 4 }; # vect_vec_iv_.0_13 = PHI <vect_vec_iv_.0_5(4), { 0, 1, 2, 3 }(2)> mask__1.1_21 = vect_vec_iv_.0_13 <= vect_cst__20; vect__2.2_25 = VIEW_CONVERT_EXPR<vector(4) unsigned int>(mask__1.1_21); MEM[(tst *)vectp_data.3_29] = vect__2.2_25; which is folded in dom3 to: gimple_simplified to mask__1.1_21 = { -1, -1, -1, -1 }; Then we end up with: MEM[(tst *)&data] = { 4294967295, 4294967295, 4294967295, 4294967295 }; It's related to fact that vector of true values is represented as {-1,..., -1}. Leaving to someone skilled in vectorizer ;)