diff options
author | Chris Lattner <sabre@nondot.org> | 2010-11-17 05:41:46 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-11-17 05:41:46 +0000 |
commit | aa6e350c88b10d3cece4296be45ed6b458dcf05a (patch) | |
tree | 9be364b41d66c6e48f58defe7df524c76ce824e8 | |
parent | b75c651e22a63907b727664f044283bf9c9fb885 (diff) | |
download | external_llvm-aa6e350c88b10d3cece4296be45ed6b458dcf05a.zip external_llvm-aa6e350c88b10d3cece4296be45ed6b458dcf05a.tar.gz external_llvm-aa6e350c88b10d3cece4296be45ed6b458dcf05a.tar.bz2 |
fix PR8613 - Copy constructor of SwitchInst does not call SwitchInst::init
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119463 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Instructions.h | 2 | ||||
-rw-r--r-- | lib/VMCore/Instructions.cpp | 17 |
2 files changed, 10 insertions, 9 deletions
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 68fc605..c681b7f 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -2161,7 +2161,7 @@ class SwitchInst : public TerminatorInst { // Operand[2n ] = Value to match // Operand[2n+1] = BasicBlock to go to on match SwitchInst(const SwitchInst &SI); - void init(Value *Value, BasicBlock *Default, unsigned NumCases); + void init(Value *Value, BasicBlock *Default, unsigned NumReserved); void resizeOperands(unsigned No); // allocate space for exactly zero operands void *operator new(size_t s) { diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 9fc9ef0..d8130d4 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -2939,9 +2939,9 @@ bool CmpInst::isFalseWhenEqual(unsigned short predicate) { // SwitchInst Implementation //===----------------------------------------------------------------------===// -void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumCases) { - assert(Value && Default); - ReservedSpace = 2+NumCases*2; +void SwitchInst::init(Value *Value, BasicBlock *Default, unsigned NumReserved) { + assert(Value && Default && NumReserved); + ReservedSpace = NumReserved; NumOperands = 2; OperandList = allocHungoffUses(ReservedSpace); @@ -2957,7 +2957,7 @@ SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases, Instruction *InsertBefore) : TerminatorInst(Type::getVoidTy(Value->getContext()), Instruction::Switch, 0, 0, InsertBefore) { - init(Value, Default, NumCases); + init(Value, Default, 2+NumCases*2); } /// SwitchInst ctor - Create a new switch instruction, specifying a value to @@ -2968,14 +2968,15 @@ SwitchInst::SwitchInst(Value *Value, BasicBlock *Default, unsigned NumCases, BasicBlock *InsertAtEnd) : TerminatorInst(Type::getVoidTy(Value->getContext()), Instruction::Switch, 0, 0, InsertAtEnd) { - init(Value, Default, NumCases); + init(Value, Default, 2+NumCases*2); } SwitchInst::SwitchInst(const SwitchInst &SI) - : TerminatorInst(Type::getVoidTy(SI.getContext()), Instruction::Switch, - allocHungoffUses(SI.getNumOperands()), SI.getNumOperands()) { + : TerminatorInst(SI.getType(), Instruction::Switch, 0, 0) { + init(SI.getCondition(), SI.getDefaultDest(), SI.getNumOperands()); + NumOperands = SI.getNumOperands(); Use *OL = OperandList, *InOL = SI.OperandList; - for (unsigned i = 0, E = SI.getNumOperands(); i != E; i+=2) { + for (unsigned i = 2, E = SI.getNumOperands(); i != E; i += 2) { OL[i] = InOL[i]; OL[i+1] = InOL[i+1]; } |