https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77513
--- Comment #5 from petschy at gmail dot com --- Some more details, hope this helps. Preprocessed one of the oddly behaving files with 5.4.1, 6.2.1 and 7.0.0, then tried to compile each preprocessed file with each compiler version. 5.4.1 warned for all preprocessed files, 6.2.1 and 7.0.0 didn't warn for any of them. This doesn't mean that 6.2.1 and 7.0.0 is not affected, just for this particular file they didn't warn. Diffing the files revealed that there is no difference in the user code, only in the system headers included, eg <string> comes from /usr/local/include/c++/5.4.1/string for 5.4.1, etc. All of the problematic lines are assignments of the form var = NULL; or var1 = var2 = NULL; ALL of the NULL assignments in the file are reported. NONE of the == or != tests are reported. Eg: this code warns: AbstractImage::AbstractImage() { pixels= # 124 "common/src/AbstractImage.cpp" 3 4 __null # 124 "common/src/AbstractImage.cpp" ; channels_n=0; mode=255; width=-1; height=-1; } But if I replace 'pixels =' with 'bool b = pixels ==' above, the warning disappears, which is strange, I think. The flags are the same for the != and == tests, ie # <n> "common/src/AbstractImage.cpp" 3 4 is everywhere.