/* foo.c */ #include <assert.h> void foo(void) { assert(1); }
gcc -c -Wconversion foo.c foo.c:6: warning: passing argument 1 of '__builtin_expect' with different width due to prototype foo.c:6: warning: passing argument 2 of '__builtin_expect' with different width due to prototype This is because assert() boils down to __builtin_expect (!!(expr), 1), which means that __builtin_expect is called with two int arguments. However, the signature of __builtin_expect is long int __builtin_expect (long int exp, long int val) Hence two warnings for the conversion of int to long int. This greatly limits the usefulness of -Wconversion. -- Summary: Excessive warnings when using assert and -Wconversion on 64bit platforms Product: gcc Version: 4.0.2 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: paulf at free dot fr http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38116