[RuntimeDyld] Use a raw_ostream and llvm::format for int-to-string conversions.
authorLang Hames <lhames@gmail.com>
Fri, 27 Jun 2014 21:07:00 +0000 (21:07 +0000)
committerLang Hames <lhames@gmail.com>
Fri, 27 Jun 2014 21:07:00 +0000 (21:07 +0000)
Some users' C++11 standard libraries don't support std::to_string yet.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211961 91177308-0d34-0410-b5e6-96231b3b80d8

lib/ExecutionEngine/RuntimeDyld/RuntimeDyldChecker.cpp

index c381baf0f5c3aad28fb7d1d247b06c06d6f4cbc1..190bbbf93ff8b222d17d7525eef037e0d6b203d0 100644 (file)
@@ -229,28 +229,28 @@ namespace llvm {
                               "");
 
       unsigned OpIdx = OpIdxExpr.getValue();
-      if (OpIdx >= Inst.getNumOperands())
-        return std::make_pair(EvalResult(("Invalid operand index '" +
-                                          std::to_string(OpIdx) +
-                                          " for instruction '" + Symbol +
-                                          ". Instruction has only " +
-                                          std::to_string(Inst.getNumOperands())
-                                          + " operands.").str()),
-                              "");
+      if (OpIdx >= Inst.getNumOperands()) {
+        std::string ErrMsg;
+        raw_string_ostream ErrMsgStream(ErrMsg);
+        ErrMsgStream << "Invalid operand index '" << format("%i", OpIdx)
+                     << " for instruction '" << Symbol
+                     << ". Instruction has only "
+                     << format("%i", Inst.getNumOperands()) << " operands.";
+        return std::make_pair(EvalResult(ErrMsgStream.str()), "");
+      }
 
       const MCOperand &Op = Inst.getOperand(OpIdx);
       if (!Op.isImm()) {
-        std::string InstrString;
-        raw_string_ostream InstrStringStream(InstrString);
-        Inst.dump_pretty(InstrStringStream,
+        std::string ErrMsg;
+        raw_string_ostream ErrMsgStream(ErrMsg);
+        ErrMsgStream << "Operand '" << format("%i", OpIdx)
+                     << "' of instruction '" << Symbol
+                     << "' is not an immediate.\nInstruction is:\n  ";
+        Inst.dump_pretty(ErrMsgStream,
                          Checker.Disassembler->getContext().getAsmInfo(),
                          Checker.InstPrinter);
-        return std::make_pair(EvalResult(("Operand '" + std::to_string(OpIdx) +
-                                          "' of instruction '" + Symbol +
-                                          "' is not an immediate.\n"
-                                          "Instruction is:\n  " +
-                                          InstrStringStream.str()).str()),
-                              "");
+
+        return std::make_pair(EvalResult(ErrMsgStream.str()), "");
       }
 
       return std::make_pair(EvalResult(Op.getImm()), RemainingExpr);