rsmith added a comment.

Like Eli, I don't see much value in this warning. But it doesn't seem much 
different from `-Wextra-semi` in that regard for languages in which such extra 
semicolons are generally valid -- I expect both warnings will generally 
diagnose typos and little else.

Does this warn on:

  switch (my_enum) {
  case E1:
    // stuff
    break;
  case E2:
    ; // nothing to do, but a label requires a following statement
  }

and

  for (/*...outer...*/) {
    for (/*...inner...*/) {
      goto contin_outer;
    }
    contin_outer: ;
  }

? We shouldn't warn on a semicolon after a label, because a statement is 
required there, and use of a null statement is idiomatic.



================
Comment at: include/clang/Basic/DiagnosticGroups.td:163
 def CXX11ExtraSemi : DiagGroup<"c++11-extra-semi">;
+def ExtraSemiPedantic : DiagGroup<"extra-semi-pedantic">;
 def ExtraSemi : DiagGroup<"extra-semi", [CXX98CompatExtraSemi,
----------------
efriedma wrote:
> We usually only use "pedantic" in the names of warnings which are enabled by 
> the "-pedantic" flag.
Maybe `-Wextra-semi-stmt` or `-Wredundant-null-stmt` or similar would be more 
appropriate?


================
Comment at: lib/Parse/ParseStmt.cpp:237
+    SourceLocation SemiLocation = ConsumeToken();
+    if (!HasLeadingEmptyMacro && getCurScope()->isCompoundStmtScope() &&
+        !SemiLocation.isMacroID()) {
----------------
I'm a little concerned that checking whether the scope is a compound statement 
isn't really checking the right thing -- what you care about is whether the 
syntactic context is a compound statement, not which scope a declaration at 
this level would be injected into. (Example of the difference: back in the 
pre-standard times when `{ for (int x = 0; x < 10; ++x) //...` injected `x` 
into the enclosing scope, the first substatement in that `for` statement would 
be in a compound-statement scope, but we definitely shouldn't warn on a stray 
`;` there.) If you moved this check into `ParseCompoundStatementBody`, there'd 
be no risk of such problems.


================
Comment at: test/Parser/extra-semi-resulting-in-nullstmt.cpp:59
+#if __cplusplus >= 201703L
+  if (; true) // OK
+    ;         // OK
----------------
It'd seem reasonable to warn on a null-statement as the *init-statement* of an 
`if` / `switch` / range-based `for`.


Repository:
  rC Clang

https://reviews.llvm.org/D52695



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to