From c69a5810f4a39f4af204e4843b497033ec6f12bf Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 30 Nov 2007 17:44:57 +0000 Subject: [PATCH] Support fully general case expressions, patch by Sanghyeon Seo! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44453 91177308-0d34-0410-b5e6-96231b3b80d8 --- CodeGen/CGStmt.cpp | 4 +++- test/CodeGen/switch.c | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CodeGen/CGStmt.cpp b/CodeGen/CGStmt.cpp index 6a2e3aa543..9665e7dc63 100644 --- a/CodeGen/CGStmt.cpp +++ b/CodeGen/CGStmt.cpp @@ -444,7 +444,9 @@ void CodeGenFunction::EmitCaseStmt(const CaseStmt &S) { StartBlock("sw.bb"); llvm::BasicBlock *CaseDest = Builder.GetInsertBlock(); - llvm::ConstantInt *LV = cast(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()); } diff --git a/test/CodeGen/switch.c b/test/CodeGen/switch.c index 68313c0741..a4d77b9c19 100644 --- a/test/CodeGen/switch.c +++ b/test/CodeGen/switch.c @@ -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: -- 2.50.1