From: Johannes Schindelin Date: Fri, 23 Jan 2015 18:46:36 GMT Subject: Re: Git compile warnings (under mac/clang) Message-ID: <321a67762d18795b743b242618950849@www.dscho.org> In-Reply-To: <20150123183737.GA32191@peff.net> Hi Peff, On 2015-01-23 19:37, Jeff King wrote: > On Fri, Jan 23, 2015 at 10:07:18AM -0800, Junio C Hamano wrote: > > [...] one thing that puzzles me is that the current code looks > like: > > if (options->msg_severity && msg_id >= 0 && msg_id < FSCK_MSG_MAX) > severity = options->msg_severity[msg_id]; > else { > severity = msg_id_info[msg_id].severity; > ... > } > > So if the severity override list given by "options" exists, _and_ if we > are in the enum range, then we use that. Otherwise, we dereference the > global list. But wouldn't an out-of-range condition have the exact same > problem dereferencing that global list? > > IOW, should this really be: > > if (msg_id < 0 || msg_id >= FSCK_MSG_MAX) > die("BUG: broken enum"); > > if (options->msg_severity) > severity = options->msg_severity[msg_id]; > else > severity = msg_id_info[msg_id].severity; > > ? And then you can spell that first part as assert(), which I suspect > (but did not test) may shut up clang's warnings. To be quite honest, I assumed that Git's source code was assert()-free. But I was wrong! So I'll go with that solution; it is by far the nicest one IMHO. Thanks! Dscho