https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70922
--- Comment #8 from Pedro Alves <palves at redhat dot com> --- - There's exactly the same number of ifs and elses in the macro. - The indentation of the else matches that of the if. - There's actually no "else" at all at the macro call site, making the warning look odd. So, IMO, we want to warn about this: #define ALL_OBJFILE_OSECTIONS(objfile, osect) \ for (osect = sections; osect < sections_end; osect++) \ if (osect->the_bfd_section != 0) \ and this: #define ALL_OBJFILE_OSECTIONS(objfile, osect) \ for (osect = sections; osect < sections_end; osect++) \ if (osect->the_bfd_section != 0) \ if (whatever != 0) \ Because this would do the wrong thing: if (condition) ALL_OBJFILE_OSECTIONS (o, osect) else return 0; But not this: #define ALL_OBJFILE_OSECTIONS(objfile, osect) \ for (osect = sections; osect < sections_end; osect++) \ if (osect->the_bfd_section != 0) \ { \ /* Nothing. */ \ } \ else