diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 8 | 
1 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index e2b065bb905..de67a5f1a75 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -501,10 +501,12 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtArg Switch,    QualType CondTypeBeforePromotion =        GetTypeBeforeIntegralPromotion(CondExpr); -  if (getLangOptions().CPlusPlus &&  +  if (getLangOptions().CPlusPlus &&        CheckCXXSwitchCondition(*this, SwitchLoc, CondExpr)) -      return StmtError(); +    return StmtError(); +  // C99 6.8.4.2p5 - Integer promotions are performed on the controlling expr. +  UsualUnaryConversions(CondExpr);    QualType CondType = CondExpr->getType();    SS->setCond(CondExpr); @@ -522,8 +524,6 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtArg Switch,        return StmtError();      } -    UsualUnaryConversions(CondExpr); -      if (CondTypeBeforePromotion->isBooleanType()) {        // switch(bool_expr) {...} is often a programmer error, e.g.        //   switch(n && mask) { ... }  // Doh - should be "n & mask".  | 

