The internal compiler representation of the following testcase:
_Bool foo (int x) { return x; }
is:
--cut here--
_Bool foo (int x)
{
_Bool _2;
<bb 2> [local count: 1073741824]:
_2 = x_1(D) != 0;
return _2;
}
--cut here--
For me, !!x in the source means that the change of types was
intentional. Surely, the compiler can do it by itself, so at the end
of the day, it is just a matter of personal taste.
17) Using bool===
--------------
The Linux kernel bool type is an alias for the C99 _Bool type. bool values can
only evaluate to 0 or 1, and implicit or explicit conversion to bool
automatically converts the value to true or false. When using bool types the
!! construction is not needed, which eliminates a class of bugs.
FYI, the whole function will soon be removed and replaced with a
generic parity8() function.