diff --git a/llvm/lib/BinaryFormat/XCOFF.cpp b/llvm/lib/BinaryFormat/XCOFF.cpp --- a/llvm/lib/BinaryFormat/XCOFF.cpp +++ b/llvm/lib/BinaryFormat/XCOFF.cpp @@ -115,9 +115,9 @@ unsigned ParsedFixedNum = 0; unsigned ParsedFloatingNum = 0; unsigned ParsedNum = 0; - unsigned ParmsNum = FixedParmsNum + FloatingParmsNum; - while (Bits < 32 && ParsedNum < ParmsNum) { + while (Bits < 32 && ParsedFixedNum <= FixedParmsNum && + ParsedFloatingNum <= FloatingParmsNum) { if (++ParsedNum > 1) ParmsType += ", "; if ((Value & TracebackTable::ParmTypeIsFloatingBit) == 0) { @@ -140,11 +140,10 @@ } // We have more parameters than the 32 Bits could encode. - if (ParsedNum < ParmsNum) + if (ParsedNum < FixedParmsNum + FloatingParmsNum) ParmsType += ", ..."; - if (Value != 0u || ParsedFixedNum > FixedParmsNum || - ParsedFloatingNum > FloatingParmsNum) + if (Value != 0u) return createStringError(errc::invalid_argument, "ParmsType encodes can not map to ParmsNum " "parameters in parseParmsType.");