[cfe-commits] r110071 - /cfe/trunk/lib/Sema/JumpDiagnostics.cpp

Daniel Dunbar daniel at zuster.org
Tue Aug 3 10:24:43 PDT 2010


Hi Ted,

Do you have a test case for this?

 - Daniel

On Mon, Aug 2, 2010 at 3:46 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Author: kremenek
> Date: Mon Aug  2 17:46:57 2010
> New Revision: 110071
>
> URL: http://llvm.org/viewvc/llvm-project?rev=110071&view=rev
> Log:
> Fix another case (this time in JumpScopeChecker) where walking deeply nested CaseStmts can blow out the stack.  Fixes <rdar://problem/8125165>.
>
> Modified:
>    cfe/trunk/lib/Sema/JumpDiagnostics.cpp
>
> Modified: cfe/trunk/lib/Sema/JumpDiagnostics.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/JumpDiagnostics.cpp?rev=110071&r1=110070&r2=110071&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/JumpDiagnostics.cpp (original)
> +++ cfe/trunk/lib/Sema/JumpDiagnostics.cpp Mon Aug  2 17:46:57 2010
> @@ -182,9 +182,19 @@
>   switch (S->getStmtClass()) {
>   case Stmt::LabelStmtClass:
>   case Stmt::DefaultStmtClass:
> -  case Stmt::CaseStmtClass:
>     LabelAndGotoScopes[S] = ParentScope;
>     break;
> +  case Stmt::CaseStmtClass: {
> +    // Specially handle CaseStmts since they can nest each other in the
> +    // AST and blow out the stack when we walk them.
> +    CaseStmt *CS = cast<CaseStmt>(S);
> +    do {
> +      LabelAndGotoScopes[CS] = ParentScope;
> +      S = CS; // 'CS' is the new current statement (if it isn't already).
> +      CS = dyn_cast<CaseStmt>(CS->getSubStmt());
> +    } while (CS);
> +    break;
> +  }
>
>   case Stmt::AddrLabelExprClass:
>     IndirectJumpTargets.push_back(cast<AddrLabelExpr>(S)->getLabel());
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>




More information about the cfe-commits mailing list