Let's suppose the -Weverything is passed.
Given code like
void F() {} ;
If the code is compiled with -std=c++03, it would diagnose that extra sema:
<source>:2:1: warning: extra ';' outside of a function is a C++11 extension [-Wc++11-extra-semi] ; ^~
If the code is compiled with -std=c++11, it also would diagnose that extra sema:
<source>:2:1: warning: extra ';' outside of a function is incompatible with C++98 [-Wc++98-compat-pedantic] ; ^~
But, let's suppose the C++11 or higher is used, and the used does not care
about -Wc++98-compat-pedantic, so he disables that diagnostic.
And that silences the complaint about extra ; too.
And there is no way to re-enable that particular diagnostic, passing -Wextra-semi does nothing...
Now, there is also a related no newline at end of file diagnostic, which is also emitted by -Wc++98-compat-pedantic
<source>:2:2: warning: C++98 requires newline at end of file [-Wc++98-compat-pedantic] ; ^
But unlike the previous case, if -Wno-c++98-compat-pedantic is passed, that diagnostic stays displayed:
<source>:2:2: warning: no newline at end of file [-Wnewline-eof] ; ^
This diff refactors the code so -Wc++98-compat-extra-semi can be re-enabled, after the -Wc++98-compat-pedantic was disabled.
This seems ugly, but there does not seem to be any saner way.
Testing: $ ninja check-clang-sema check-clang-semacxx check-clang-lexer check-clang-parser