<div dir="ltr"><div>I recently added (r267054) and then revert (r267234) some warnings for floating point to bool conversions pending more discussion on the topic.  From my experience, bool conversions are tricky and a source of many bugs, so a warning in this place would be good.</div><div><br></div><div>Bool behaves a little differently than other integer types.  For instance, 0.5 is converted to zero for integer types, except for bool which it gets converted to true.  Also, bool is the type for conditionals and resulting type of logical operators.</div><div><br></div><div>However, at least one style guide says to use floating point to bool conversion (<a href="https://webkit.org/code-style-guidelines/#null-false-and-zero">https://webkit.org/code-style-guidelines/#null-false-and-zero</a>)</div><div><br></div><div>With that, I hope to get a little more discussion on this topic before implementing the floating point to bool conversion warnings again.  The two factors for the warning are the source of the floating point value and where the conversion happens, although there may be other factors we need to take into account.  Only the source has been taken account so far since it is the easier way to implement.</div><div><br></div><div>Source:<br></div><div>Exact floating point literals (0.0, 1.0)<br></div><div>Rounded floating point literals (0.5, 4.0)</div><div>Exact compiler time constant (5.0 - 4.0, kZero)</div><div>Inexact compiler time constant (1.0 / 2.0, kHugeNumber)</div><div>Run time values (getFloat())</div><div><br></div><div>Location:</div><div>Function Argument</div><div>Assigning/Initializing bool variable</div><div>Return statement of bool returning function</div><div>Condition of if statement, for loop, while loop, or do-while loop</div><div>Condition of conditional operator (?:)</div><div>Operand of logical operators(&&, ||, !)</div><div><br></div><div>Currently, exact floating point literals are not warned on, rounded floating point literals are under -Wliteral-conversion, and everything else is under -Wfloat-conversion.</div><div><br></div><div>Note that exclusionary groups may also be useful, for instance "-Wfloat-conversion -Wno-some-bool-warning" if that helps filter out some of the more noisy warnings.</div></div>