On 2016.10.07 at 15:18 +0000, Bernd Edlinger wrote:
> Hi!
>
> This extends -Wint-in-bool-context to uses of enum values in boolean
> context, and fixes one place where accidentally an enum value was
> passed to a bool parameter.
>
> I excluded enum values 0 and 1 because that is used in
> gimple-ssa-strength-reduction.c, where we have enums
> which are passed in bool function arguments:
>
> enum stride_status
> {
> UNKNOWN_STRIDE = 0,
> KNOWN_STRIDE = 1
> };
>
> enum phi_adjust_status
> {
> NOT_PHI_ADJUST = 0,
> PHI_ADJUST = 1
> };
>
> enum count_phis_status
> {
> DONT_COUNT_PHIS = 0,
> COUNT_PHIS = 1
> };
>
> I would'nt use an enum in that way, but I think it is
> at least not completely wrong to do it like that...
>
>
> Unfortunately C is less strict with enum values, and from
> and enum we only see an integer value without an enum type
> in C.
>
> Therefore this warning does not work in C, only in C++.
> Also integer constants do not have a source location, so
> the displayed location is usually a bit vague.
> But I think it is still better than no warning at all.
>
>
> Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
> Is it OK for trunk?
I came across an borderline example in Chromium today:
62 enum FlushBehavior {
63 // More bytes are coming, don't flush the codec.
64 DoNotFlush = 0,
65
66 // A fetch has hit EOF. Some codecs handle fetches differently, for compat
67 // reasons.
68 FetchEOF,
69
70 // Do a full flush of the codec.
71 DataEOF
72 };
73
74 static_assert(!DoNotFlush, "DoNotFlush should be falsy");
75 static_assert(FetchEOF, "FetchEOF should be truthy");
76 static_assert(DataEOF, "DataEOF should be truthy");
../../third_party/WebKit/Source/wtf/text/TextCodec.h:76:51: warning: enum
constant in boolean context [-Wint-in-bool-context]
static_assert(DataEOF, "DataEOF should be truthy");
^
--
Markus