<div dir="ltr"><div>Hi Doug,</div><div><br></div><div>Thanks letting me know - I'm looking at it now. Once I have a fix is there a way to run the test before committing to make sure it succeeds? I'd like to be able to reproduce the problem so that I can test fixes to see if they fix the problem. I'm running Arch Linux so I might have to come up with something creative to reproduce a Windows file path and induce the failure. I'm open to suggestions if you have any!<br></div><div><br></div><div>Best,</div><div>Mike<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Aug 4, 2019 at 8:39 PM <<a href="mailto:douglas.yung@sony.com">douglas.yung@sony.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Michael,<br>
<br>
2 tests you modified in this commit are failing when run on a Windows bot. It seems to be due to the [[FILE]] substitution escaping characters and then expecting the output generated to match it which it does not since things are then doubly escaped. Can you take a look and try to fix this to get the bot green again?<br>
<br>
<a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/27368" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/27368</a><br>
<br>
FAIL: LLVM :: tools/llvm-objdump/X86/source-interleave-missing-source.test (48999 of 51701)<br>
******************** TEST 'LLVM :: tools/llvm-objdump/X86/source-interleave-missing-source.test' FAILED ********************<br>
Script:<br>
--<br>
: 'RUN: at line 4';   sed -e "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp,g" C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll > C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.ll<br>
: 'RUN: at line 5';   sed -e "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.src/test/tools/llvm-objdump/X86/Inputs,g" C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll > C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.ll<br>
: 'RUN: at line 7';   c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe -o C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o -filetype=obj -mtriple=x86_64-pc-linux C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.ll<br>
: 'RUN: at line 8';   c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe -o C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o -filetype=obj -mtriple=x86_64-pc-linux C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.ll<br>
: 'RUN: at line 10';   c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe --source C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o 2> C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e | c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test --check-prefixes=CHECK --implicit-check-not='main()'<br>
: 'RUN: at line 11';   c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe --source C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o | c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test --check-prefixes=CHECK,SOURCE<br>
: 'RUN: at line 12';   c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test --input-file C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e --check-prefixes=WARN -DFILE=C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp/source-interleave-x86_64.c<br>
--<br>
Exit Code: 1<br>
<br>
Command Output (stdout):<br>
--<br>
$ ":" "RUN: at line 4"<br>
$ "sed" "-e" "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp,g" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll"<br>
$ ":" "RUN: at line 5"<br>
$ "sed" "-e" "s,SRC_COMPDIR,C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.src/test/tools/llvm-objdump/X86/Inputs,g" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86/Inputs/source-interleave.ll"<br>
$ ":" "RUN: at line 7"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe" "-o" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o" "-filetype=obj" "-mtriple=x86_64-pc-linux" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.ll"<br>
$ ":" "RUN: at line 8"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llc.exe" "-o" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o" "-filetype=obj" "-mtriple=x86_64-pc-linux" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.ll"<br>
$ ":" "RUN: at line 10"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe" "--source" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.o"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test" "--check-prefixes=CHECK" "--implicit-check-not=main()"<br>
$ ":" "RUN: at line 11"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe" "--source" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp2.o"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test" "--check-prefixes=CHECK,SOURCE"<br>
$ ":" "RUN: at line 12"<br>
$ "c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\filecheck.exe" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test" "--input-file" "C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e" "--check-prefixes=WARN" "-DFILE=C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp/source-interleave-x86_64.c"<br>
# command stderr:<br>
C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.src\test\tools\llvm-objdump\X86\source-interleave-missing-source.test:14:9: error: WARN: expected string not found in input<br>
<br>
# WARN: warning: failed to find source [[FILE]]<br>
<br>
        ^<br>
<br>
C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e:1:1: note: scanning from here<br>
<br>
c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe: warning: failed to find source C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp\source-interleave-x86_64.c<br>
<br>
^<br>
<br>
C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e:1:1: note: with "FILE" equal to "C:\\\\ps4-buildslave2\\\\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\\\\llvm\\.obj\\\\test\\\\tools\\\\llvm-objdump\\\\X86\\\\Output\\\\source-interleave-missing-source\\.test\\.tmp/source-interleave-x86_64\\.c"<br>
<br>
c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe: warning: failed to find source C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp\source-interleave-x86_64.c<br>
<br>
^<br>
<br>
C:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\test\tools\llvm-objdump\X86\Output\source-interleave-missing-source.test.tmp.e:1:100: note: possible intended match here<br>
<br>
c:\ps4-buildslave2\llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast\llvm.obj\bin\llvm-objdump.exe: warning: failed to find source C:/ps4-buildslave2/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/llvm.obj/test/tools/llvm-objdump/X86/Output/source-interleave-missing-source.test.tmp\source-interleave-x86_64.c<br>
<br>
                                                                                                   ^<br>
<br>
<br>
error: command failed with exit status: 1<br>
<br>
Douglas Yung<br>
<br>
-----Original Message-----<br>
From: llvm-commits <<a href="mailto:llvm-commits-bounces@lists.llvm.org" target="_blank">llvm-commits-bounces@lists.llvm.org</a>> On Behalf Of Michael Pozulp via llvm-commits<br>
Sent: Saturday, August 3, 2019 23:04<br>
To: <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
Subject: [llvm] r367776 - [llvm-objdump] Re-commit r367284.<br>
<br>
Author: pozulp<br>
Date: Sat Aug  3 23:04:00 2019<br>
New Revision: 367776<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=367776&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=367776&view=rev</a><br>
Log:<br>
[llvm-objdump] Re-commit r367284.<br>
<br>
Add warning messages if disassembly + source for problematic inputs<br>
<br>
Summary: Addresses <a href="https://bugs.llvm.org/show_bug.cgi?id=41905" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=41905</a><br>
<br>
Reviewers: jhenderson, rupprecht, grimar<br>
<br>
Reviewed By: jhenderson, grimar<br>
<br>
Subscribers: hiraditya, llvm-commits<br>
<br>
Tags: #llvm<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D62462" rel="noreferrer" target="_blank">https://reviews.llvm.org/D62462</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/DebugInfo/DIContext.h<br>
    llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
    llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp<br>
    llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test<br>
    llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test<br>
    llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test<br>
    llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp<br>
    llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp<br>
    llvm/trunk/tools/llvm-objdump/llvm-objdump.h<br>
    llvm/trunk/tools/llvm-xray/func-id-helper.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/DebugInfo/DIContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DIContext.h?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DIContext.h?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/DebugInfo/DIContext.h (original)<br>
+++ llvm/trunk/include/llvm/DebugInfo/DIContext.h Sat Aug  3 23:04:00 <br>
+++ 2019<br>
@@ -28,6 +28,10 @@ namespace llvm {<br>
<br>
 /// A format-neutral container for source line information.<br>
 struct DILineInfo {<br>
+  // DILineInfo contains "<invalid>" for function/filename it cannot fetch.<br>
+  static constexpr const char *const BadString = "<invalid>";  // Use <br>
+ "??" instead of "<invalid>" to make our output closer to addr2line.<br>
+  static constexpr const char *const Addr2LineBadString = "??";<br>
   std::string FileName;<br>
   std::string FunctionName;<br>
   Optional<StringRef> Source;<br>
@@ -38,7 +42,7 @@ struct DILineInfo {<br>
   // DWARF-specific.<br>
   uint32_t Discriminator = 0;<br>
<br>
-  DILineInfo() : FileName("<invalid>"), FunctionName("<invalid>") {}<br>
+  DILineInfo() : FileName(BadString), FunctionName(BadString) {}<br>
<br>
   bool operator==(const DILineInfo &RHS) const {<br>
     return Line == RHS.Line && Column == RHS.Column && @@ -61,9 +65,9 @@ struct DILineInfo {<br>
<br>
   void dump(raw_ostream &OS) {<br>
     OS << "Line info: ";<br>
-    if (FileName != "<invalid>")<br>
+    if (FileName != BadString)<br>
       OS << "file '" << FileName << "', ";<br>
-    if (FunctionName != "<invalid>")<br>
+    if (FunctionName != BadString)<br>
       OS << "function '" << FunctionName << "', ";<br>
     OS << "line " << Line << ", ";<br>
     OS << "column " << Column << ", ";<br>
@@ -109,7 +113,7 @@ struct DIGlobal {<br>
   uint64_t Start = 0;<br>
   uint64_t Size = 0;<br>
<br>
-  DIGlobal() : Name("<invalid>") {}<br>
+  DIGlobal() : Name(DILineInfo::BadString) {}<br>
 };<br>
<br>
 struct DILocal {<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFContext.cpp Sat Aug  3 23:04:00 <br>
+++ 2019<br>
@@ -1118,8 +1118,8 @@ DILineInfoTable DWARFContext::getLineInf<br>
   if (!CU)<br>
     return Lines;<br>
<br>
-  std::string FunctionName = "<invalid>";<br>
   uint32_t StartLine = 0;<br>
+  std::string FunctionName(DILineInfo::BadString);<br>
   getFunctionNameAndStartLineForAddress(CU, Address.Address, Spec.FNKind,<br>
                                         FunctionName, StartLine);<br>
<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/Symbolize/DIPrinter.cpp Sat Aug  3 23:04:00 <br>
+++ 2019<br>
@@ -30,11 +30,6 @@<br>
 namespace llvm {<br>
 namespace symbolize {<br>
<br>
-// By default, DILineInfo contains "<invalid>" for function/filename it -// cannot fetch. We replace it to "??" to make our output closer to addr2line.<br>
-static const char kDILineInfoBadString[] = "<invalid>"; -static const char kBadString[] = "??";<br>
-<br>
 // Prints source code around in the FileName the Line.<br>
 void DIPrinter::printContext(const std::string &FileName, int64_t Line) {<br>
   if (PrintSourceContext <= 0)<br>
@@ -68,16 +63,16 @@ void DIPrinter::printContext(const std::<br>
 void DIPrinter::print(const DILineInfo &Info, bool Inlined) {<br>
   if (PrintFunctionNames) {<br>
     std::string FunctionName = Info.FunctionName;<br>
-    if (FunctionName == kDILineInfoBadString)<br>
-      FunctionName = kBadString;<br>
+    if (FunctionName == DILineInfo::BadString)<br>
+      FunctionName = DILineInfo::Addr2LineBadString;<br>
<br>
     StringRef Delimiter = PrintPretty ? " at " : "\n";<br>
     StringRef Prefix = (PrintPretty && Inlined) ? " (inlined by) " : "";<br>
     OS << Prefix << FunctionName << Delimiter;<br>
   }<br>
   std::string Filename = Info.FileName;<br>
-  if (Filename == kDILineInfoBadString)<br>
-    Filename = kBadString;<br>
+  if (Filename == DILineInfo::BadString)<br>
+    Filename = DILineInfo::Addr2LineBadString;<br>
   else if (Basenames)<br>
     Filename = llvm::sys::path::filename(Filename);<br>
   if (!Verbose) {<br>
@@ -115,8 +110,8 @@ DIPrinter &DIPrinter::operator<<(const D<br>
<br>
 DIPrinter &DIPrinter::operator<<(const DIGlobal &Global) {<br>
   std::string Name = Global.Name;<br>
-  if (Name == kDILineInfoBadString)<br>
-    Name = kBadString;<br>
+  if (Name == DILineInfo::BadString)<br>
+    Name = DILineInfo::Addr2LineBadString;<br>
   OS << Name << "\n";<br>
   OS << Global.Start << " " << Global.Size << "\n";<br>
   return *this;<br>
<br>
Modified: llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-source.test (original)<br>
+++ llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-invalid-sou<br>
+++ rce.test Sat Aug  3 23:04:00 2019<br>
@@ -1,5 +1,5 @@<br>
 ## Test llvm-objdump's --source behaviour when a line number is greater than the -## file length.<br>
+## file length and ensure that we emit a warning.<br>
<br>
 # RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll > %t.ll  # RUN: sed -e "s,line: 7,line: 9999,g" %t.ll > %t2.ll @@ -8,9 +8,11 @@  # RUN: llc -o %t2.o -filetype=obj -mtriple=x86_64-pc-linux %t2.ll<br>
<br>
 # RUN: llvm-objdump --source %t.o | FileCheck %s --check-prefixes=CHECK,GOOD -# RUN: llvm-objdump --source %t2.o | FileCheck %s --implicit-check-not="int *b = &a;"<br>
+# RUN: llvm-objdump --source %t2.o 2> %t2.e | FileCheck %s --check-prefixes=CHECK --implicit-check-not="int *b = &a;"<br>
+# RUN: FileCheck %s --input-file %t2.e --check-prefixes=WARN <br>
+-DFILE=%p/Inputs/source-interleave-x86_64.c<br>
<br>
 # CHECK:      main:<br>
 # CHECK-NEXT: ; int main() {<br>
+# WARN:       warning: debug info line number 9999 exceeds the number of lines in [[FILE]]<br>
 # GOOD:       ;   int *b = &a;<br>
 # CHECK:      ;   return *b + foo();<br>
<br>
Modified: llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-source.test (original)<br>
+++ llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-missing-sou<br>
+++ rce.test Sat Aug  3 23:04:00 2019<br>
@@ -1,5 +1,5 @@<br>
 ## Test that if the source cannot be found that disassembly is still printed, -## and that no source is printed.<br>
+## that no source is printed, and that we emit a warning.<br>
<br>
 # RUN: sed -e "s,SRC_COMPDIR,%/t,g" %p/Inputs/source-interleave.ll > %t.ll  # RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll > %t2.ll @@ -7,9 +7,11 @@  # RUN: llc -o %t.o -filetype=obj -mtriple=x86_64-pc-linux %t.ll  # RUN: llc -o %t2.o -filetype=obj -mtriple=x86_64-pc-linux %t2.ll<br>
<br>
-# RUN: llvm-objdump --source %t.o | FileCheck %s --implicit-check-not='main()'<br>
+# RUN: llvm-objdump --source %t.o 2> %t.e | FileCheck %s --check-prefixes=CHECK --implicit-check-not='main()'<br>
 # RUN: llvm-objdump --source %t2.o | FileCheck %s --check-prefixes=CHECK,SOURCE<br>
+# RUN: FileCheck %s --input-file %t.e --check-prefixes=WARN <br>
+-DFILE=%t/source-interleave-x86_64.c<br>
<br>
+# WARN:        warning: failed to find source [[FILE]]<br>
 # CHECK:       0000000000000010 main:<br>
 # SOURCE-NEXT: ; int main() {<br>
 # CHECK-NEXT:   10:   55                      pushq   %rbp<br>
<br>
Modified: llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-info.test (original)<br>
+++ llvm/trunk/test/tools/llvm-objdump/X86/source-interleave-no-debug-in<br>
+++ fo.test Sat Aug  3 23:04:00 2019<br>
@@ -1,13 +1,15 @@<br>
 ## Test that if an object has no debug information, only the disassembly is -## printed when --source is specified.<br>
+## printed when --source is specified, and that we emit a warning.<br>
<br>
 # RUN: sed -e "s,SRC_COMPDIR,%/p/Inputs,g" %p/Inputs/source-interleave.ll > %t.ll  # RUN: llc -o %t.o -filetype=obj -mtriple=x86_64-pc-linux %t.ll  # RUN: llvm-objcopy --strip-debug %t.o %t2.o<br>
<br>
 # RUN: llvm-objdump --source %t.o | FileCheck %s --check-prefixes=CHECK,SOURCE -# RUN: llvm-objdump --source %t2.o | FileCheck %s --implicit-check-not='main()'<br>
+# RUN: llvm-objdump --source %t2.o 2> %t2.e | FileCheck %s --check-prefixes=CHECK --implicit-check-not='main()'<br>
+# RUN: FileCheck %s --input-file %t2.e --check-prefixes=WARN <br>
+-DFILE=%t2.o<br>
<br>
+# WARN:        warning: failed to parse debug information for [[FILE]]<br>
 # CHECK:       0000000000000010 main:<br>
 # SOURCE-NEXT: ; int main() {<br>
 # CHECK-NEXT:   10:   55                      pushq   %rbp<br>
<br>
Modified: llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp (original)<br>
+++ llvm/trunk/tools/llvm-cfi-verify/lib/FileAnalysis.cpp Sat Aug  3 <br>
+++ 23:04:00 2019<br>
@@ -520,7 +520,7 @@ void FileAnalysis::parseSectionContents(<br>
         continue;<br>
       }<br>
<br>
-      if (LineInfo->FileName == "<invalid>")<br>
+      if (LineInfo->FileName == DILineInfo::BadString)<br>
         continue;<br>
     }<br>
<br>
<br>
Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp (original)<br>
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.cpp Sat Aug  3 23:04:00 <br>
+++ 2019<br>
@@ -51,6 +51,7 @@<br>
 #include "llvm/Support/Errc.h"<br>
 #include "llvm/Support/FileSystem.h"<br>
 #include "llvm/Support/Format.h"<br>
+#include "llvm/Support/FormatVariadic.h"<br>
 #include "llvm/Support/GraphWriter.h"<br>
 #include "llvm/Support/Host.h"<br>
 #include "llvm/Support/InitLLVM.h"<br>
@@ -381,12 +382,7 @@ LLVM_ATTRIBUTE_NORETURN void error(Twine<br>
   exit(1);<br>
 }<br>
<br>
-void warn(StringRef Message) {<br>
-  WithColor::warning(errs(), ToolName) << Message << ".\n";<br>
-  errs().flush();<br>
-}<br>
-<br>
-static void warn(Twine Message) {<br>
+void warn(Twine Message) {<br>
   // Output order between errs() and outs() matters especially for archive<br>
   // files where the output is per member object.<br>
   outs().flush();<br>
@@ -548,17 +544,22 @@ protected:<br>
   DILineInfo OldLineInfo;<br>
   const ObjectFile *Obj = nullptr;<br>
   std::unique_ptr<symbolize::LLVMSymbolizer> Symbolizer;<br>
-  // File name to file contents of source<br>
+  // File name to file contents of source.<br>
   std::unordered_map<std::string, std::unique_ptr<MemoryBuffer>> SourceCache;<br>
-  // Mark the line endings of the cached source<br>
+  // Mark the line endings of the cached source.<br>
   std::unordered_map<std::string, std::vector<StringRef>> LineCache;<br>
+  // Keep track of missing sources.<br>
+  StringSet<> MissingSources;<br>
+  // Only emit 'no debug info' warning once.<br>
+  bool WarnedNoDebugInfo;<br>
<br>
 private:<br>
   bool cacheSource(const DILineInfo& LineInfoFile);<br>
<br>
 public:<br>
   SourcePrinter() = default;<br>
-  SourcePrinter(const ObjectFile *Obj, StringRef DefaultArch) : Obj(Obj) {<br>
+  SourcePrinter(const ObjectFile *Obj, StringRef DefaultArch)<br>
+      : Obj(Obj), WarnedNoDebugInfo(false) {<br>
     symbolize::LLVMSymbolizer::Options SymbolizerOpts;<br>
     SymbolizerOpts.PrintFunctions = DILineInfoSpecifier::FunctionNameKind::None;<br>
     SymbolizerOpts.Demangle = false;<br>
@@ -568,6 +569,7 @@ public:<br>
   virtual ~SourcePrinter() = default;<br>
   virtual void printSourceLine(raw_ostream &OS,<br>
                                object::SectionedAddress Address,<br>
+                               StringRef ObjectFilename,<br>
                                StringRef Delimiter = "; ");  };<br>
<br>
@@ -577,8 +579,11 @@ bool SourcePrinter::cacheSource(const DI<br>
     Buffer = MemoryBuffer::getMemBuffer(*LineInfo.Source);<br>
   } else {<br>
     auto BufferOrError = MemoryBuffer::getFile(LineInfo.FileName);<br>
-    if (!BufferOrError)<br>
+    if (!BufferOrError) {<br>
+      if (MissingSources.insert(LineInfo.FileName).second)<br>
+        warn("failed to find source " + LineInfo.FileName);<br>
       return false;<br>
+    }<br>
     Buffer = std::move(*BufferOrError);<br>
   }<br>
   // Chomp the file to get lines<br>
@@ -599,20 +604,33 @@ bool SourcePrinter::cacheSource(const DI<br>
<br>
 void SourcePrinter::printSourceLine(raw_ostream &OS,<br>
                                     object::SectionedAddress Address,<br>
+                                    StringRef ObjectFilename,<br>
                                     StringRef Delimiter) {<br>
   if (!Symbolizer)<br>
     return;<br>
<br>
   DILineInfo LineInfo = DILineInfo();<br>
   auto ExpectedLineInfo = Symbolizer->symbolizeCode(*Obj, Address);<br>
+  std::string ErrorMessage;<br>
   if (!ExpectedLineInfo)<br>
-    consumeError(ExpectedLineInfo.takeError());<br>
+    ErrorMessage = toString(ExpectedLineInfo.takeError());<br>
   else<br>
     LineInfo = *ExpectedLineInfo;<br>
<br>
-  if ((LineInfo.FileName == "<invalid>") || LineInfo.Line == 0 ||<br>
-      ((OldLineInfo.Line == LineInfo.Line) &&<br>
-       (OldLineInfo.FileName == LineInfo.FileName)))<br>
+  if (LineInfo.FileName == DILineInfo::BadString) {<br>
+    if (!WarnedNoDebugInfo) {<br>
+      std::string Warning =<br>
+          "failed to parse debug information for " + ObjectFilename.str();<br>
+      if (!ErrorMessage.empty())<br>
+        Warning += ": " + ErrorMessage;<br>
+      warn(Warning);<br>
+      WarnedNoDebugInfo = true;<br>
+    }<br>
+    return;<br>
+  }<br>
+<br>
+  if (LineInfo.Line == 0 || ((OldLineInfo.Line == LineInfo.Line) &&<br>
+                             (OldLineInfo.FileName == <br>
+ LineInfo.FileName)))<br>
     return;<br>
<br>
   if (PrintLines)<br>
@@ -623,8 +641,12 @@ void SourcePrinter::printSourceLine(raw_<br>
         return;<br>
     auto LineBuffer = LineCache.find(LineInfo.FileName);<br>
     if (LineBuffer != LineCache.end()) {<br>
-      if (LineInfo.Line > LineBuffer->second.size())<br>
+      if (LineInfo.Line > LineBuffer->second.size()) {<br>
+        warn(formatv(<br>
+            "debug info line number {0} exceeds the number of lines in {1}",<br>
+            LineInfo.Line, LineInfo.FileName));<br>
         return;<br>
+      }<br>
       // Vector begins at 0, line numbers are non-zero<br>
       OS << Delimiter << LineBuffer->second[LineInfo.Line - 1] << '\n';<br>
     }<br>
@@ -663,10 +685,10 @@ public:<br>
                          ArrayRef<uint8_t> Bytes,<br>
                          object::SectionedAddress Address, raw_ostream &OS,<br>
                          StringRef Annot, MCSubtargetInfo const &STI,<br>
-                         SourcePrinter *SP,<br>
+                         SourcePrinter *SP, StringRef ObjectFilename,<br>
                          std::vector<RelocationRef> *Rels = nullptr) {<br>
     if (SP && (PrintSource || PrintLines))<br>
-      SP->printSourceLine(OS, Address);<br>
+      SP->printSourceLine(OS, Address, ObjectFilename);<br>
<br>
     size_t Start = OS.tell();<br>
     if (!NoLeadingAddr)<br>
@@ -707,9 +729,10 @@ public:<br>
   void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t> Bytes,<br>
                  object::SectionedAddress Address, raw_ostream &OS,<br>
                  StringRef Annot, MCSubtargetInfo const &STI, SourcePrinter *SP,<br>
+                 StringRef ObjectFilename,<br>
                  std::vector<RelocationRef> *Rels) override {<br>
     if (SP && (PrintSource || PrintLines))<br>
-      SP->printSourceLine(OS, Address, "");<br>
+      SP->printSourceLine(OS, Address, ObjectFilename, "");<br>
     if (!MI) {<br>
       printLead(Bytes, Address.Address, OS);<br>
       OS << " <unknown>";<br>
@@ -746,7 +769,7 @@ public:<br>
       OS << Separator;<br>
       Separator = "\n";<br>
       if (SP && (PrintSource || PrintLines))<br>
-        SP->printSourceLine(OS, Address, "");<br>
+        SP->printSourceLine(OS, Address, ObjectFilename, "");<br>
       printLead(Bytes, Address.Address, OS);<br>
       OS << Preamble;<br>
       Preamble = "   ";<br>
@@ -776,9 +799,10 @@ public:<br>
   void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t> Bytes,<br>
                  object::SectionedAddress Address, raw_ostream &OS,<br>
                  StringRef Annot, MCSubtargetInfo const &STI, SourcePrinter *SP,<br>
+                 StringRef ObjectFilename,<br>
                  std::vector<RelocationRef> *Rels) override {<br>
     if (SP && (PrintSource || PrintLines))<br>
-      SP->printSourceLine(OS, Address);<br>
+      SP->printSourceLine(OS, Address, ObjectFilename);<br>
<br>
     if (MI) {<br>
       SmallString<40> InstStr;<br>
@@ -827,9 +851,10 @@ public:<br>
   void printInst(MCInstPrinter &IP, const MCInst *MI, ArrayRef<uint8_t> Bytes,<br>
                  object::SectionedAddress Address, raw_ostream &OS,<br>
                  StringRef Annot, MCSubtargetInfo const &STI, SourcePrinter *SP,<br>
+                 StringRef ObjectFilename,<br>
                  std::vector<RelocationRef> *Rels) override {<br>
     if (SP && (PrintSource || PrintLines))<br>
-      SP->printSourceLine(OS, Address);<br>
+      SP->printSourceLine(OS, Address, ObjectFilename);<br>
     if (!NoLeadingAddr)<br>
       OS << format("%8" PRId64 ":", Address.Address / 8);<br>
     if (!NoShowRawInsn) {<br>
@@ -1377,10 +1402,10 @@ static void disassembleObject(const Targ<br>
         if (Size == 0)<br>
           Size = 1;<br>
<br>
-        PIP.printInst(<br>
-            *IP, Disassembled ? &Inst : nullptr, Bytes.slice(Index, Size),<br>
-            {SectionAddr + Index + VMAAdjustment, Section.getIndex()}, outs(),<br>
-            "", *STI, &SP, &Rels);<br>
+        PIP.printInst(*IP, Disassembled ? &Inst : nullptr,<br>
+                      Bytes.slice(Index, Size),<br>
+                      {SectionAddr + Index + VMAAdjustment, Section.getIndex()},<br>
+                      outs(), "", *STI, &SP, Obj->getFileName(), <br>
+ &Rels);<br>
         outs() << CommentStream.str();<br>
         Comments.clear();<br>
<br>
<br>
Modified: llvm/trunk/tools/llvm-objdump/llvm-objdump.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.h?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-objdump/llvm-objdump.h?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-objdump/llvm-objdump.h (original)<br>
+++ llvm/trunk/tools/llvm-objdump/llvm-objdump.h Sat Aug  3 23:04:00 <br>
+++ 2019<br>
@@ -129,7 +129,7 @@ void printSectionHeaders(const object::O  void printSectionContents(const object::ObjectFile *O);  void printSymbolTable(const object::ObjectFile *O, StringRef ArchiveName,<br>
                       StringRef ArchitectureName = StringRef()); -void warn(StringRef Message);<br>
+void warn(Twine Message);<br>
 LLVM_ATTRIBUTE_NORETURN void error(Twine Message);  LLVM_ATTRIBUTE_NORETURN void report_error(StringRef File, Twine Message);  LLVM_ATTRIBUTE_NORETURN void report_error(Error E, StringRef File);<br>
<br>
Modified: llvm/trunk/tools/llvm-xray/func-id-helper.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-xray/func-id-helper.cpp?rev=367776&r1=367775&r2=367776&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-xray/func-id-helper.cpp?rev=367776&r1=367775&r2=367776&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/tools/llvm-xray/func-id-helper.cpp (original)<br>
+++ llvm/trunk/tools/llvm-xray/func-id-helper.cpp Sat Aug  3 23:04:00 <br>
+++ 2019<br>
@@ -36,7 +36,7 @@ std::string FuncIdConversionHelper::Symb<br>
   ModuleAddress.SectionIndex = object::SectionedAddress::UndefSection;<br>
   if (auto ResOrErr = Symbolizer.symbolizeCode(BinaryInstrMap, ModuleAddress)) {<br>
     auto &DI = *ResOrErr;<br>
-    if (DI.FunctionName == "<invalid>")<br>
+    if (DI.FunctionName == DILineInfo::BadString)<br>
       F << "@(" << std::hex << It->second << ")";<br>
     else<br>
       F << DI.FunctionName;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>