sequencer: silence -Wtautological-constant-out-of-range-compare
authorJeff King <peff@peff.net>
Wed, 9 Nov 2016 03:57:28 +0000 (22:57 -0500)
committerJeff King <peff@peff.net>
Wed, 9 Nov 2016 03:59:24 +0000 (22:59 -0500)
When clang compiles sequencer.c, it complains:

sequencer.c:632:14: warning: comparison of constant 2 with
expression of type 'const enum todo_command' is always
true [-Wtautological-constant-out-of-range-compare]
if (command < ARRAY_SIZE(todo_command_strings))

This is because "command" is an enum that may only have two
values (0 and 1) and the array in question has two elements.

As it turns out, clang is actually wrong here, at least
according to its own bug tracker:

https://llvm.org/bugs/show_bug.cgi?id=16154

But it's still worth working around this, as the warning is
present with -Wall, meaning we fail compilation with "make
DEVELOPER=1".

Casting the enum to size_t sufficiently unconfuses clang. As
a bonus, it also catches any possible out-of-bounds access
if the enum takes on a negative value (which shouldn't
happen either, but again, this is a defensive check).

Signed-off-by: Jeff King <peff@peff.net>
sequencer.c
index a61fe76f98f0a5805bb75e9b5c40c39b4b750498..fae2bbd2ba3fa2cce55e3b936c720eda709f2a8b 100644 (file)
@@ -629,7 +629,7 @@ static const char *todo_command_strings[] = {
 
 static const char *command_to_string(const enum todo_command command)
 {
-       if (command < ARRAY_SIZE(todo_command_strings))
+       if ((size_t)command < ARRAY_SIZE(todo_command_strings))
                return todo_command_strings[command];
        die("Unknown command: %d", command);
 }