diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-01-11 03:07:46 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-01-11 03:07:46 +0000 |
commit | aaef8ce85655cd3a8d51161aecd2278e9a670443 (patch) | |
tree | 69f9f0547cd0b240f0a11ead75fbe06361f3ff7d /llvm/lib/Target/CBackend/CBackend.cpp | |
parent | 8d5841ae3c537699c9c1acde5142a0dccb7b800e (diff) | |
download | bcm5719-llvm-aaef8ce85655cd3a8d51161aecd2278e9a670443.tar.gz bcm5719-llvm-aaef8ce85655cd3a8d51161aecd2278e9a670443.zip |
A couple of obvious off-by-one bugs.
llvm-svn: 45852
Diffstat (limited to 'llvm/lib/Target/CBackend/CBackend.cpp')
-rw-r--r-- | llvm/lib/Target/CBackend/CBackend.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Target/CBackend/CBackend.cpp b/llvm/lib/Target/CBackend/CBackend.cpp index f4e9e341528..23e9b275d81 100644 --- a/llvm/lib/Target/CBackend/CBackend.cpp +++ b/llvm/lib/Target/CBackend/CBackend.cpp @@ -366,10 +366,11 @@ void CWriter::printStructReturnPointerFunctionType(std::ostream &Out, FunctionType::param_iterator I = FTy->param_begin(), E = FTy->param_end(); const Type *RetTy = cast<PointerType>(I->get())->getElementType(); unsigned Idx = 1; - for (++I; I != E; ++I) { + for (++I, ++Idx; I != E; ++I, ++Idx) { if (PrintedType) FunctionInnards << ", "; - printType(FunctionInnards, *I, + const Type *ArgTy = *I; + printType(FunctionInnards, ArgTy, /*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt), ""); PrintedType = true; } @@ -1866,23 +1867,25 @@ void CWriter::printFunctionSignature(const Function *F, bool Prototype) { if (!F->isDeclaration()) { if (!F->arg_empty()) { Function::const_arg_iterator I = F->arg_begin(), E = F->arg_end(); + unsigned Idx = 1; // If this is a struct-return function, don't print the hidden // struct-return argument. if (isStructReturn) { assert(I != E && "Invalid struct return function!"); ++I; + ++Idx; } std::string ArgName; - unsigned Idx = 1; for (; I != E; ++I) { if (PrintedArg) FunctionInnards << ", "; if (I->hasName() || !Prototype) ArgName = GetValueName(I); else ArgName = ""; - printType(FunctionInnards, I->getType(), + const Type *ArgTy = I->getType(); + printType(FunctionInnards, ArgTy, /*isSigned=*/PAL && PAL->paramHasAttr(Idx, ParamAttr::SExt), ArgName); PrintedArg = true; |