[PATCH] [clang-tidy] Add check for possibly incomplete switch statements

Benjamin Kramer benny.kra at gmail.com
Mon Aug 4 12:32:22 PDT 2014


================
Comment at: clang-tidy/misc/IncompleteSwitchCheck.cpp:11
@@ +10,3 @@
+  Finder->addMatcher(
+      switchStmt(hasDescendant(implicitCastExpr().bind("cast")),
+                 unless(hasDescendant(defaultStmt()))).bind("switch"),
----------------
This will also match casts that occur somewhere inside of the switch cases, you probably want to use a plain has instead of hasDescendent.

================
Comment at: clang-tidy/misc/IncompleteSwitchCheck.cpp:12
@@ +11,3 @@
+      switchStmt(hasDescendant(implicitCastExpr().bind("cast")),
+                 unless(hasDescendant(defaultStmt()))).bind("switch"),
+      this);
----------------
Similar problem, what if one switch with a default case is contained within a switch without one?

================
Comment at: clang-tidy/misc/IncompleteSwitchCheck.cpp:19
@@ +18,3 @@
+  const auto c = Result.Nodes.getNodeAs<ImplicitCastExpr>("cast");
+  if (c->getCastKind() == CK_IntegralCast)
+    return;
----------------
I think actually checking that you're casting from an enum would be a good idea, integral casts are common with integers too.

  short foo;
  switch (foo) {// Implicit int promotion.
    ...
  }

================
Comment at: test/clang-tidy/incomplete-switch.cpp:1
@@ +1,2 @@
+// RUN: clang-tidy --checks='-*,misc-incomplete-switch' %s -- | FileCheck %s
+
----------------
Please add ` -implicit-check-not="{{warning|error}}:"` here, otherwise it doesn't check if additional warnings are emitted.

http://reviews.llvm.org/D4784






More information about the cfe-commits mailing list