https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70922
--- Comment #13 from Pedro Alves <palves at redhat dot com> --- Should have been: if (condition) ALL_OBJFILE_OSECTIONS (o, osect) { /* do something with each o / osect */ } else return 0; So if the ALL_OBJFILE_OSECTIONS macro contains an imbalanced if/else then the "else" above binds to the wrong "if". But not if the macro contains a balanced if/else, such as in the original code.