OSDN Git Service

[llvm-objdump] Simplify reportError() and prepend outs().flush()
authorFangrui Song <maskray@google.com>
Sun, 31 May 2020 00:25:18 +0000 (17:25 -0700)
committerFangrui Song <maskray@google.com>
Sun, 31 May 2020 00:25:59 +0000 (17:25 -0700)
As noticed by dblaikie.

I don't know what code paths using reportError can cause stdout output
to be interleaved with stderr, so no test is added now.

Also drop an unneeded use of errs().fflush() in reportWarning().
I requested this in D64165.

llvm/tools/llvm-objdump/llvm-objdump.cpp

index 6eebf98..d62839a 100644 (file)
@@ -420,10 +420,10 @@ void reportWarning(Twine Message, StringRef File) {
   outs().flush();
   WithColor::warning(errs(), ToolName)
       << "'" << File << "': " << Message << "\n";
-  errs().flush();
 }
 
 LLVM_ATTRIBUTE_NORETURN void reportError(StringRef File, Twine Message) {
+  outs().flush();
   WithColor::error(errs(), ToolName) << "'" << File << "': " << Message << "\n";
   exit(1);
 }
@@ -432,6 +432,7 @@ LLVM_ATTRIBUTE_NORETURN void reportError(Error E, StringRef FileName,
                                          StringRef ArchiveName,
                                          StringRef ArchitectureName) {
   assert(E);
+  outs().flush();
   WithColor::error(errs(), ToolName);
   if (ArchiveName != "")
     errs() << ArchiveName << "(" << FileName << ")";
@@ -439,11 +440,8 @@ LLVM_ATTRIBUTE_NORETURN void reportError(Error E, StringRef FileName,
     errs() << "'" << FileName << "'";
   if (!ArchitectureName.empty())
     errs() << " (for architecture " << ArchitectureName << ")";
-  std::string Buf;
-  raw_string_ostream OS(Buf);
-  logAllUnhandledErrors(std::move(E), OS);
-  OS.flush();
-  errs() << ": " << Buf;
+  errs() << ": ";
+  logAllUnhandledErrors(std::move(E), errs());
   exit(1);
 }