http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60100
--- Comment #8 from lavr at ncbi dot nlm.nih.gov --- This is the code from the original .c file that fails to post a warning. sock->w_len -= BUF_PeekAtCB(sock->w_buf, BUF_Size(sock->w_buf) - sock->w_len, x_WriteBuf, &ctx, sock->w_len); It is not changed in any way during pre-processing. An assert() comes right after it. x_WriteBuf is a function (defined just prior to the function where it is used) that had a wrong prototype versus what a header defining BUF_PeekAtCB() declared. What constitutes a system header? Because a file that defines BUF_PeekAtCB() is referenced via angle brackets (versus quotes) in the #include directive. A path for gcc is provided with the -I option. Finally, if gcc compiling the original code .c manages to post a warning, it certainly somehow knows that no system headers are involved in this particular case.