[PATCH] D99580: [CLANG] [DebugInfo] Convert File name to native format

kamlesh kumar via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 30 05:16:48 PDT 2021


kamleshbhalui created this revision.
kamleshbhalui added reviewers: dblaikie, aprantl.
kamleshbhalui added a project: LLVM.
Herald added a subscriber: mstorsjo.
kamleshbhalui requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Clang emits duplicate file entry in object file on windows platform(when windows style path appended with posix style path or vice versa).
which becomes problem for some debugger(not able to put break point on the file which has duplicate entry).

By making sure it's native path before creating DIFile above problem goes away.

Testcase Demonstration of problem on llvm-dev:
https://lists.llvm.org/pipermail/llvm-dev/2021-March/149501.html


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D99580

Files:
  clang/lib/CodeGen/CGDebugInfo.cpp
  clang/test/CodeGen/debug-info-mingw.c


Index: clang/test/CodeGen/debug-info-mingw.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/debug-info-mingw.c
@@ -0,0 +1,7 @@
+// RUN: rm -rf %t/UNIQUE_DIR && mkdir -p %t/UNIQUE_DIR
+// RUN: cp %s %t/UNIQUE_DIR/debug-info-mingw.c
+// RUN: %clang_cc1 -triple x86_64-w64-windows-gnu -debug-info-kind=limited -main-file-name debug-info-mingw.c %t/UNIQUE_DIR/debug-info-mingw.c -emit-llvm -o - | FileCheck %s
+int main() {
+}
+// CHECK: !DIFile(filename: "{{.+}}\\UNIQUE_DIR\\debug-info-mingw.c",
+// UNSUPPORTED: !system-windows
Index: clang/lib/CodeGen/CGDebugInfo.cpp
===================================================================
--- clang/lib/CodeGen/CGDebugInfo.cpp
+++ clang/lib/CodeGen/CGDebugInfo.cpp
@@ -443,6 +443,10 @@
                         Optional<StringRef> Source) {
   StringRef Dir;
   StringRef File;
+  // Convert FileName to native path
+  SmallString<128> NativePath = FileName;
+  llvm::sys::path::native(NativePath);
+  FileName = NativePath.str();
   std::string RemappedFile = remapDIPath(FileName);
   std::string CurDir = remapDIPath(getCurrentDirname());
   SmallString<128> DirBuf;
@@ -558,7 +562,10 @@
             MainFile->getName().rsplit('.').second)
             .isPreprocessed())
       MainFileName = CGM.getModule().getName().str();
-
+    // Convert MainFileName to native path
+    SmallString<128> NativePath = (StringRef)MainFileName;
+    llvm::sys::path::native(NativePath);
+    MainFileName = (std::string)NativePath.str();
     CSKind = computeChecksum(SM.getMainFileID(), Checksum);
   }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D99580.334112.patch
Type: text/x-patch
Size: 1603 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210330/1297e502/attachment.bin>


More information about the cfe-commits mailing list