summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaStmt.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-11-25 15:17:36 +0000
committerDouglas Gregor <dgregor@apple.com>2009-11-25 15:17:36 +0000
commit7fdcbaf29103c1ccfc881e3de308fa2c17888e62 (patch)
tree0cf05a559cf47b8f695a6ace96ed759c74749d77 /clang/lib/Sema/SemaStmt.cpp
parent2db07581b7f7f61c5c8647367e60cf69a5c545ce (diff)
downloadbcm5719-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.cpp8
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".
OpenPOWER on IntegriCloud