================
@@ -205,27 +205,40 @@ void Parser::ConsumeExtraSemi(ExtraSemiKind Kind,
DeclSpec::TST TST) {
ConsumeToken();
}
+ if (Kind == ExtraSemiKind::AfterMemberFunctionDefinition &&
+ !HadMultipleSemis) {
+ // A single semicolon is valid after a member function definition.
+ Diag(StartLoc, diag::warn_extra_semi_after_mem_fn_def)
+ << FixItHint::CreateRemoval(SourceRange(StartLoc, EndLoc));
+ return;
+ }
+
// C++11 allows extra semicolons at namespace scope, but not in any of the
// other contexts.
- if (Kind == ExtraSemiKind::OutsideFunction && getLangOpts().CPlusPlus) {
+ // DR 1693 and DR 3079 extend this to class scope as well.
+ if ((Kind == ExtraSemiKind::OutsideFunction ||
+ Kind == ExtraSemiKind::InsideStruct ||
+ Kind == ExtraSemiKind::AfterMemberFunctionDefinition) &&
+ getLangOpts().CPlusPlus) {
if (getLangOpts().CPlusPlus11)
- Diag(StartLoc, diag::warn_cxx98_compat_top_level_semi)
+ Diag(StartLoc, diag::warn_cxx98_compat_extra_semi)
+ << Kind
+ << DeclSpec::getSpecifierName(
+ TST, Actions.getASTContext().getPrintingPolicy())
----------------
Sirraide wrote:
> Is there a way to preserve the semantics of `-Wc++11-extra-semi` and
> `-Wc++98-compat-extra-semi` with this or what should happen with these flags?
Of course there are separate diagnostic groups for these... no in that case you
can’t use `CXXCompat` for this; that might be the the reason why I didn’t
migrate these warnings to use that
https://github.com/llvm/llvm-project/pull/172209
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits