Hi On Tue, Oct 9, 2018 at 5:14 PM Selva Nair <selva.n...@gmail.com> wrote:
> > > In fact the issue here is not the unary minus, but the unsigned to signed > conversion. So when there is no scope for overflow all is good. If there is > overflow, unsigned->signed conversion is ill-defined -- cast doesn't fix > it. In fact the cast is meaningless here (see more on that below): > > Although C99 std does not seem to be explicit about unary minus of > unsigned, the practice in C even before that was to subtract the number > from the largest possible value and add 1: as in K&R A7.4.5 (p. 204 in my > copy): > > "If the operand is unsigned, the result is computed by subtracting the > value from the largest value of the promoted type" > > So unary minus of unsigned itself is well-defined. Actually even the unary > minus of unsigned is computed using the above rule for signed: > > "If the operand is signed, the result is computed by promoted operand to > its unsigned type, applying -, and converting back to the signed type".!! > > > So what the cast achieves is a an additional iteration of conversions > which gains nothing. > Ignore most of it -- I'm having really bad day and writing mostly nonsense. Selva
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel