ptx: bug fix: use after free
authorChe-Liang Chiou <clchiou@gmail.com>
Wed, 1 Dec 2010 11:45:53 +0000 (11:45 +0000)
committerChe-Liang Chiou <clchiou@gmail.com>
Wed, 1 Dec 2010 11:45:53 +0000 (11:45 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120571 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/PTX/PTXAsmPrinter.cpp

index 8fb1f53d2b5bff9463baf94b759b7f3904e3a0aa..f4525521d50537196ddaecfbdc353cac613342dc 100644 (file)
@@ -130,20 +130,21 @@ void PTXAsmPrinter::EmitFunctionBodyStart() {
 }
 
 void PTXAsmPrinter::EmitInstruction(const MachineInstr *MI) {
-  SmallString<128> sstr;
-  raw_svector_ostream OS(sstr);
+  std::string str;
+  str.reserve(64);
+
+  // Write instruction to str
+  raw_string_ostream OS(str);
   printInstruction(MI, OS);
   OS << ';';
+  OS.flush();
 
   // Replace "%type" if found
-  StringRef strref = OS.str();
   size_t pos;
-  if ((pos = strref.find("%type")) != StringRef::npos) {
-    std::string str = strref;
+  if ((pos = str.find("%type")) != std::string::npos)
     str.replace(pos, /*strlen("%type")==*/5, getInstructionTypeName(MI));
-    strref = StringRef(str);
-  }
 
+  StringRef strref = StringRef(str);
   OutStreamer.EmitRawText(strref);
 }