https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120845
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The more important is the The last preprocessing token in the sequence is the first preprocessing token within the sequence that is immediately followed by whitespace containing a new-line character. line before that. So, for export module my_module [[this_is_a_useless_attribute]]; the last preprocessing token in the sequence is my_module and so it isn't a valid preprocessing directive because export module must have ; as the last preprocessing token.