mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 03:26:48 +00:00

Summary: 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` Reviewers: rsmith, rtrieu, aaron.ballman Reviewed By: aaron.ballman Subscribers: jordan_rose, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D43162 llvm-svn: 327558
30 lines
931 B
C++
30 lines
931 B
C++
// RUN: %clang_cc1 -verify -std=c++98 -Wextra-semi %s
|
|
// RUN: %clang_cc1 -verify -std=c++03 -Wextra-semi %s
|
|
// RUN: %clang_cc1 -verify -std=c++11 -Wextra-semi %s
|
|
// RUN: %clang_cc1 -verify -std=c++17 -Wextra-semi %s
|
|
// RUN: %clang_cc1 -verify -std=c++2a -Wextra-semi %s
|
|
// RUN: %clang_cc1 -verify -Weverything -Wno-c++98-compat %s
|
|
// RUN: %clang_cc1 -verify -Weverything -Wno-c++98-compat-pedantic -Wc++98-compat-extra-semi %s
|
|
|
|
// Last RUN line checks that c++98-compat-extra-semi can still be re-enabled.
|
|
|
|
void F();
|
|
|
|
void F(){}
|
|
;
|
|
#if __cplusplus < 201103L
|
|
// expected-warning@-2{{extra ';' outside of a function is a C++11 extension}}
|
|
#else
|
|
// expected-warning@-4{{extra ';' outside of a function is incompatible with C++98}}
|
|
#endif
|
|
|
|
namespace ns {
|
|
class C {
|
|
void F() const;
|
|
};
|
|
}
|
|
; // expected-warning {{extra ';' outside of a function is}}
|
|
|
|
void ns::C::F() const {}
|
|
; // expected-warning {{extra ';' outside of a function is}}
|