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,10 @@ ## Warn if --disassemble-functions specifies an unknown symbol. -# RUN: yaml2obj %s | llvm-objdump - --disassemble-functions=foo 2>&1 | FileCheck %s + +# RUN: yaml2obj -o %t.o %s +# RUN: rm -f %t.a +# RUN: llvm-ar qc %t.a %t.o %t.o +# RUN: llvm-objdump --disassemble-functions=foo %t.o 2>&1 | FileCheck %s +# RUN: llvm-objdump --disassemble-functions=foo %t.a 2>&1 | FileCheck %s --check-prefix=MULTI --- !ELF FileHeader: @@ -9,3 +14,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) { +static void warn(Twine Message) { + // Output order between errs() and outs() matters especially for archive + // files where the output is per member object. + outs().flush(); WithColor::warning(errs(), ToolName) << Message << "\n"; + errs().flush(); } LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, Twine Message) {