diff --git a/llvm/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test b/llvm/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test --- a/llvm/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test +++ b/llvm/test/tools/llvm-objdump/X86/warn-missing-disasm-func.test @@ -1,5 +1,11 @@ ## Warn if --disassemble-functions specifies an unknown symbol. -# RUN: yaml2obj %s | llvm-objdump - --disassemble-functions=foo 2>&1 | FileCheck %s + +# RUN: yaml2obj -o %t.1.o %s +# RUN: yaml2obj -o %t.2.o %s +# RUN: rm -f %t.a +# RUN: llvm-ar rc %t.a %t.1.o %t.2.o +# RUN: llvm-objdump --disassemble-functions=foo %t.1.o 2>&1 | FileCheck %s +# RUN: llvm-objdump --disassemble-functions=foo %t.a 2>&1 | FileCheck %s --check-prefix=MULTI --- !ELF FileHeader: @@ -9,3 +15,8 @@ Machine: EM_X86_64 # CHECK: warning: failed to disassemble missing function foo + +# MULTI: file format ELF64-x86-64 +# MULTI: warning: failed to disassemble missing function foo +# MULTI: file format ELF64-x86-64 +# MULTI: warning: failed to disassemble missing function foo diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -381,8 +381,12 @@ errs().flush(); } -void warn(Twine Message) { - WithColor::warning(errs(), ToolName) << Message << "\n"; +static void warn(Twine Message, StringRef Prefix = "") { + // Output order between errs() and outs() matters especially for archive + // files where the output is per member object. + outs().flush(); + WithColor::warning(errs(), Prefix) << Message << "\n"; + errs().flush(); } LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, Twine Message) {