aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/CppBackend/CPPBackend.cpp
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2010-06-07 19:05:06 +0000
committerBill Wendling <isanbard@gmail.com>2010-06-07 19:05:06 +0000
commit754655755def3e37bb2856467313c7fe0e577298 (patch)
treefcbdcb7e5e1adbd679c817a6699fe07866503b1e /lib/Target/CppBackend/CPPBackend.cpp
parentcb7f14742a0018d2661dac491e10dc05c4ba80c7 (diff)
downloadexternal_llvm-754655755def3e37bb2856467313c7fe0e577298.zip
external_llvm-754655755def3e37bb2856467313c7fe0e577298.tar.gz
external_llvm-754655755def3e37bb2856467313c7fe0e577298.tar.bz2
Create new accessors to get arguments for call/invoke instructions. It breaks
encapsulation to force the users of these classes to know about the internal data structure of the Operands structure. It also can lead to errors, like in the MSIL writer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105539 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CppBackend/CPPBackend.cpp')
-rw-r--r--lib/Target/CppBackend/CPPBackend.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/Target/CppBackend/CPPBackend.cpp b/lib/Target/CppBackend/CPPBackend.cpp
index 45a0c84..1bf021b 100644
--- a/lib/Target/CppBackend/CPPBackend.cpp
+++ b/lib/Target/CppBackend/CPPBackend.cpp
@@ -1150,16 +1150,18 @@ namespace {
const InvokeInst* inv = cast<InvokeInst>(I);
Out << "std::vector<Value*> " << iName << "_params;";
nl(Out);
- for (unsigned i = 0; i < inv->getNumOperands() - 3; ++i) {
+ for (unsigned i = 0; i < inv->getNumArgOperands(); ++i) {
Out << iName << "_params.push_back("
- << opNames[i] << ");";
+ << getOpName(inv->getArgOperand(i)) << ");";
nl(Out);
}
+ // FIXME: This shouldn't use magic numbers -3, -2, and -1.
Out << "InvokeInst *" << iName << " = InvokeInst::Create("
- << opNames[Ops - 3] << ", "
- << opNames[Ops - 2] << ", "
- << opNames[Ops - 1] << ", "
- << iName << "_params.begin(), " << iName << "_params.end(), \"";
+ << getOpName(inv->getCalledFunction()) << ", "
+ << getOpName(inv->getNormalDest()) << ", "
+ << getOpName(inv->getUnwindDest()) << ", "
+ << iName << "_params.begin(), "
+ << iName << "_params.end(), \"";
printEscapedString(inv->getName());
Out << "\", " << bbname << ");";
nl(Out) << iName << "->setCallingConv(";