What is happening here is that the division by 2 is optimized into a shift with conditional addition (the unsigned char is promoted to int, so it is a signed division), then generalized constant propagation realized that we divide something that comes from an unsigned char, so is actually nonnegative, and the conditional addition is optimized out again.
It is somewhat unfortunate, that optimizing out conditional code created by another optimization gives the same warning as optimizing out a branch that is written explicitly by the user. But the same can be argued for conditionals in inlined functions called with constant arguments: I guess in general EVELYN's warning are too verbose, and there are a lot of false-positives.

 
👍
1