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