diff options
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/Sema.h | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 10 | 
2 files changed, 12 insertions, 0 deletions
| diff --git a/clang/lib/Sema/Sema.h b/clang/lib/Sema/Sema.h index 06e9e3ae9e6..ead9feb48e3 100644 --- a/clang/lib/Sema/Sema.h +++ b/clang/lib/Sema/Sema.h @@ -1373,6 +1373,8 @@ public:                                         SourceLocation ElseLoc, StmtArg ElseVal);    virtual OwningStmtResult ActOnStartOfSwitchStmt(FullExprArg Cond,                                                     DeclPtrTy CondVar); +  virtual void ActOnSwitchBodyError(SourceLocation SwitchLoc, StmtArg Switch, +                                    StmtArg Body);    virtual OwningStmtResult ActOnFinishSwitchStmt(SourceLocation SwitchLoc,                                                   StmtArg Switch, StmtArg Body);    virtual OwningStmtResult ActOnWhileStmt(SourceLocation WhileLoc, diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 0c207fa6e87..4653c77c86a 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -482,6 +482,16 @@ static bool CheckCXXSwitchCondition(Sema &S, SourceLocation SwitchLoc,    return false;  } +/// ActOnSwitchBodyError - This is called if there is an error parsing the +/// body of the switch stmt instead of ActOnFinishSwitchStmt. +void Sema::ActOnSwitchBodyError(SourceLocation SwitchLoc, StmtArg Switch, +                                StmtArg Body) { +  // Keep the switch stack balanced. +  assert(getSwitchStack().back() == (SwitchStmt*)Switch.get() && +         "switch stack missing push/pop!"); +  getSwitchStack().pop_back(); +} +  Action::OwningStmtResult  Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtArg Switch,                              StmtArg Body) { | 

