diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-11-25 15:17:36 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-11-25 15:17:36 +0000 |
| commit | 7fdcbaf29103c1ccfc881e3de308fa2c17888e62 (patch) | |
| tree | 0cf05a559cf47b8f695a6ace96ed759c74749d77 /clang/lib/Sema/SemaStmt.cpp | |
| parent | 2db07581b7f7f61c5c8647367e60cf69a5c545ce (diff) | |
| download | bcm5719-llvm-7fdcbaf29103c1ccfc881e3de308fa2c17888e62.tar.gz bcm5719-llvm-7fdcbaf29103c1ccfc881e3de308fa2c17888e62.zip | |
Fix a thinko where we weren't always performing unary conversions on the switch condition, fixing PR5612
llvm-svn: 89864
Diffstat (limited to 'clang/lib/Sema/SemaStmt.cpp')
| -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". |

