<html>
    <head>
      <base href="http://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW --- - -Wimplicit-fallthrough gets confused by a non-case label in a switch"
   href="http://llvm.org/bugs/show_bug.cgi?id=18259">18259</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>-Wimplicit-fallthrough gets confused by a non-case label in a switch
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++11
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>nicolasweber@gmx.de
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>dgregor@apple.com, llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>This doesn't warn but probably should:

Nicos-MacBook-Pro:clang thakis$ cat test3.cc 
int main(int argc, char*argv[]) {
  switch (argc) {
    case 4:
      argc += 4;

mylabel:
    default:
      break;
  }
}
Nicos-MacBook-Pro:clang thakis$ ../../Release+Asserts/bin/clang -std=c++11
-Wimplicit-fallthrough test3.cc 



This seems to fix this and not break any other tests as far as I can tell, but
I'm not sure if it's the right fix:

Nicos-MacBook-Pro:clang thakis$ svn diff lib/Sema/AnalysisBasedWarnings.cpp 
Index: lib/Sema/AnalysisBasedWarnings.cpp
===================================================================
--- lib/Sema/AnalysisBasedWarnings.cpp    (revision 197300)
+++ lib/Sema/AnalysisBasedWarnings.cpp    (working copy)
@@ -786,8 +786,12 @@
           continue; // Previous case label has no statements, good.

         const LabelStmt *L = dyn_cast_or_null<LabelStmt>(P->getLabel());
-        if (L && L->getSubStmt() == B.getLabel() && P->begin() == P->end())
-          continue; // Case label is preceded with a normal label, good.
+        if (L && L->getSubStmt() == B.getLabel() && P->begin() == P->end()) {
+          // Case label is preceded by a normal label, keep looking.
+          std::copy(P->pred_begin(), P->pred_end(),
+                    std::back_inserter(BlockQueue));
+          continue;
+        }

         if (!ReachableBlocks.count(P)) {
           for (CFGBlock::const_reverse_iterator ElemIt = P->rbegin(),</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>