From: Junio C Hamano Date: Wed, 30 Dec 2015 00:09:21 GMT Subject: Re: [PATCH 1/2] avoid shifting signed integers 31 bits Message-ID: In-Reply-To: <20151229063545.GA30340@sigill.intra.peff.net> Jeff King writes: > diff --git a/diff.h b/diff.h > index f7208ad..893f446 100644 > --- a/diff.h > +++ b/diff.h > @@ -91,7 +91,7 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data) > #define DIFF_OPT_DIRSTAT_BY_LINE (1 << 28) > #define DIFF_OPT_FUNCCONTEXT (1 << 29) > #define DIFF_OPT_PICKAXE_IGNORE_CASE (1 << 30) > -#define DIFF_OPT_DEFAULT_FOLLOW_RENAMES (1 << 31) > +#define DIFF_OPT_DEFAULT_FOLLOW_RENAMES (1U << 31) > > #define DIFF_OPT_TST(opts, flag) ((opts)->flags & DIFF_OPT_##flag) > #define DIFF_OPT_TOUCHED(opts, flag) ((opts)->touched_flags & DIFF_OPT_##flag) Thanks. Seeing (1 << 30) and (1U <<31) together made me feel that we are way _too_ explicit being careful about 32-bit archs (iow, it would be more consistent to turn all of these "1 <<" into "1U <<"), but at the same time, (1 << 30) won't be broken unless we are on 31-bit arch in the sense that if we are on 30-bit or smaller arch the expression is already broken with or without "U", and if we are on 32-bit or more, then with or without "U" we are OK---which made me feel somewhat funny. In any case, these two are good changes. Thanks.