]> granicus.if.org Git - clang/commitdiff
Support fully general case expressions, patch by Sanghyeon Seo!
authorChris Lattner <sabre@nondot.org>
Fri, 30 Nov 2007 17:44:57 +0000 (17:44 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 30 Nov 2007 17:44:57 +0000 (17:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44453 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGStmt.cpp
test/CodeGen/switch.c

index 6a2e3aa54302b86e15ba747c1d8172c5dfedba8e..9665e7dc634fcae78c6c838e640e0866e19cd118 100644 (file)
@@ -444,7 +444,9 @@ void CodeGenFunction::EmitCaseStmt(const CaseStmt &S) {
     
   StartBlock("sw.bb");
   llvm::BasicBlock *CaseDest = Builder.GetInsertBlock();
-  llvm::ConstantInt *LV = cast<llvm::ConstantInt>(EmitScalarExpr(S.getLHS()));
+  llvm::APSInt CaseVal(32);
+  S.getLHS()->isIntegerConstantExpr(CaseVal, getContext());
+  llvm::ConstantInt *LV = llvm::ConstantInt::get(CaseVal);
   SwitchInsn->addCase(LV, CaseDest);
   EmitStmt(S.getSubStmt());
 }
index 68313c0741f0a11e9286795646b3b4bc904f26da..a4d77b9c199daad043dc8f8d0b944a8bf322b1bc 100644 (file)
@@ -3,6 +3,8 @@
 int foo(int i) {
   int j = 0;
   switch (i) {
+  case -1:
+    j = 1; break;
   case 1 : 
     j = 2; break;
   case 2: