]> granicus.if.org Git - clang/commitdiff
Refactor ActOnFinishSwitchStmt to simplify it further
authorDouglas Gregor <dgregor@apple.com>
Wed, 25 Nov 2009 05:02:21 +0000 (05:02 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 25 Nov 2009 05:02:21 +0000 (05:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89843 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaStmt.cpp

index a826c672914f56c37c68070b9e369a0c803f0236..b54de3e171118e678d1be221956b195682871da3 100644 (file)
@@ -481,11 +481,6 @@ static bool CheckCXXSwitchCondition(Sema &S, SourceLocation SwitchLoc,
       return true;
     }
   } 
-  CondType = CondExpr->getType();
-
-  // Integral promotions are performed.
-  if (CondType->isIntegralType() || CondType->isEnumeralType())
-    S.UsualUnaryConversions(CondExpr);
 
   return false;
 }
@@ -504,17 +499,12 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, StmtArg Switch,
   Expr *CondExpr = SS->getCond();
   QualType CondTypeBeforePromotion =
       GetTypeBeforeIntegralPromotion(CondExpr);
-  QualType CondType = CondExpr->getType();
 
-  if (getLangOptions().CPlusPlus) {
-    if (CheckCXXSwitchCondition(*this, SwitchLoc, CondExpr))
+  if (getLangOptions().CPlusPlus && 
+      CheckCXXSwitchCondition(*this, SwitchLoc, CondExpr))
       return StmtError();
-  } else {
-    // C99 6.8.4.2p5 - Integer promotions are performed on the
-    // controlling expr.
-    UsualUnaryConversions(CondExpr);
-  }
-  CondType = CondExpr->getType();
+
+  QualType CondType = CondExpr->getType();
   SS->setCond(CondExpr);
 
   // C++ 6.4.2.p2:
@@ -531,6 +521,8 @@ 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".