Hi! This testcase has been fixed by r253146 but that testcase is quite different from this one, so I've committed this to trunk as obvious.
2017-12-05 Jakub Jelinek <ja...@redhat.com> PR tree-optimization/83283 * g++.dg/torture/pr83283.C: New test. --- gcc/testsuite/g++.dg/torture/pr83283.C.jj 2017-12-05 13:01:03.432144366 +0100 +++ gcc/testsuite/g++.dg/torture/pr83283.C 2017-12-05 13:00:55.926238921 +0100 @@ -0,0 +1,26 @@ +// PR tree-optimization/83283 +// { dg-do run } +// { dg-additional-options "-std=c++11" } + +enum E : unsigned char { X = 0, Y = 1 }; + +void __attribute__((noinline)) +foo (E *v, int size) +{ + for (int i = 0; i < size; ++i) + { + const bool b = (v[i] == E::Y); + v[i] = static_cast<E>(static_cast<unsigned char>(b)); + } +} + +int +main () +{ + constexpr int items = 32; + E vals[items] = {X}; + vals[3] = Y; + foo (vals, items); + if (vals[3] != 1) + __builtin_abort (); +} Jakub