gcc >= 3.x emits wrong warning for assignment of bool=non-bool=value; for bool=bool=value, no warning is emitted, which is fine.
$ for i in 2.95 3.4 4.0 4.1 4.2-HEAD 4.3-HEAD;do echo "# gcc-$i:";echo -e "#include <stdbool.h>\nint i;bool b;int main(void){b=i=false;return b;}" | gcc-$i -xc - -o boo -Wall;./boo ; echo ret=$?;done # gcc-2.95: ret=0 # gcc-3.4: <stdin>: In function `main': <stdin>:2: warning: suggest parentheses around assignment used as truth value ret=0 # gcc-4.0: <stdin>: In function 'main': <stdin>:2: warning: suggest parentheses around assignment used as truth value ret=0 # gcc-4.1: <stdin>: In function 'main': <stdin>:2: warning: suggest parentheses around assignment used as truth value ret=0 # gcc-4.2-HEAD: <stdin>: In function 'main': <stdin>:2: warning: suggest parentheses around assignment used as truth value ret=0 # gcc-4.3-HEAD: <stdin>: In function 'main': <stdin>:2: warning: suggest parentheses around assignment used as truth value ret=0 -- Summary: prints incorrect warning Product: gcc Version: 4.2.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: aldot at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31524