<div style="font-family: arial, helvetica, sans-serif; font-size: 10pt"><div dir="ltr"><div class="gmail_default" style>I guess you're trying to do something similar to -Wimplicit-fallthrough diagnostics. If this is the case, take a look at <a href="http://llvm.org/svn/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp">http://llvm.org/svn/llvm-project/cfe/trunk/lib/Sema/AnalysisBasedWarnings.cpp</a>, <span style="color:rgb(0,0,0);white-space:pre-wrap">DiagnoseSwitchLabelsFallthrough function. In short: you can use CFG (control-flow graph) to reason about execution paths, and, for example, detect if there's an execution path between two case labels.</span></div>
<div class="gmail_default" style><span style="color:rgb(0,0,0);white-space:pre-wrap"><br></span></div><div class="gmail_default" style><span style="color:rgb(0,0,0);white-space:pre-wrap">If you need something simpler, and just detect if there's any 'break' somewhere between two case labels (I'm not sure I understand why you would need this, though), you can just use RecursiveASTVisitor and handle SwitchStmt, </span><span style="color:rgb(0,0,0);white-space:pre-wrap">SwitchCase (which can be either </span><span style="color:rgb(0,0,0);white-space:pre-wrap">CaseStmt or </span><font color="#000000"><span style="white-space:pre-wrap">DefaultStmt)</span></font><span style="color:rgb(0,0,0);white-space:pre-wrap"> and BreakStmt.</span></div>
<div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 1, 2013 at 3:30 PM, kevinlynx <span dir="ltr"><<a href="mailto:kevinlynx@gmail.com" target="_blank">kevinlynx@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
In my parser, I get a `SwitchStmt`, and I can traverse all `case` statements of it. I want to check whether a `case` statement has a `break` statement. But i can not figure it out. Here is my codes:<br><br>    for (SwitchCase *c = stmt->getSwitchCaseList(); c != NULL; c = c->getNextSwitchCase()) {<br>
            if (isa<CaseStmt>(c)) {<br>                CaseStmt *caseStmt = cast<CaseStmt>(c)<br>                // I do not know how to check `CaseStmt` has a `BreakStmt`<br>            }<br>    }<br><br>Thanks.<br>
<br>BTW, I'm writing a static c code analyzer recently, this tool will check a number of c coding style rules for c codes. And because I'm a newbie to clang, so there will be more newbie questions coming, i'm sorry if i bother you guys. <br>
<br></blockquote><div><br></div><div><br></div><div style>-- </div><div style>Regards,</div><div style>Alexander Kornienko </div></div>
</div></div></div>