[PATCH] D150817: Use windows baskslash on anonymous tag locations if using MSVCFormatting and it's not absolute path.

Zequan Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 17 14:11:36 PDT 2023


zequanwu created this revision.
zequanwu added a reviewer: hans.
Herald added a project: All.
zequanwu requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This fixes a nondeterminism on debug info when building on windows natively vs
cross building to windows.

[1] https://github.com/llvm/llvm-project/blob/llvmorg-17-init/clang/lib/Lex/HeaderSearch.cpp#L465


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D150817

Files:
  clang/lib/AST/TypePrinter.cpp
  clang/test/CodeGen/Inputs/debug-info-slash.cpp
  clang/test/CodeGen/Inputs/debug-info-slash.h
  clang/test/CodeGen/debug-info-slash.test


Index: clang/test/CodeGen/debug-info-slash.test
===================================================================
--- /dev/null
+++ clang/test/CodeGen/debug-info-slash.test
@@ -0,0 +1,10 @@
+RUN: rm -rf %t-dir
+RUN: mkdir -p %t-dir/header/Inputs
+RUN: cp %S/Inputs/debug-info-slash.cpp %t-dir/
+RUN: cp %S/Inputs/debug-info-slash.h %t-dir/header/Inputs
+RUN: cd %t-dir
+RUN: %clang -target x86_64-pc-win32 -emit-llvm -S -g  %t-dir/debug-info-slash.cpp -Iheader -o - | FileCheck --check-prefix=WIN %s
+RUN: %clang -target x86_64-linux-gnu -emit-llvm -S -g  %t-dir/debug-info-slash.cpp -Iheader -o - | FileCheck --check-prefix=LINUX %s
+
+WIN:   lambda at header\\Inputs\\debug-info-slash.h
+LINUX: lambda at header/Inputs/debug-info-slash.h
Index: clang/test/CodeGen/Inputs/debug-info-slash.h
===================================================================
--- /dev/null
+++ clang/test/CodeGen/Inputs/debug-info-slash.h
@@ -0,0 +1,6 @@
+template <typename... T>
+void f1() {}
+void a() {
+  auto Lambda = [] {};
+  f1<decltype(Lambda)>();
+}
Index: clang/test/CodeGen/Inputs/debug-info-slash.cpp
===================================================================
--- /dev/null
+++ clang/test/CodeGen/Inputs/debug-info-slash.cpp
@@ -0,0 +1,2 @@
+#include "Inputs/debug-info-slash.h"
+int main() { a(); return 0; }
Index: clang/lib/AST/TypePrinter.cpp
===================================================================
--- clang/lib/AST/TypePrinter.cpp
+++ clang/lib/AST/TypePrinter.cpp
@@ -1385,11 +1385,18 @@
       if (PLoc.isValid()) {
         OS << " at ";
         StringRef File = PLoc.getFilename();
+        llvm::SmallString<1024> WrittenFile(File);
         if (auto *Callbacks = Policy.Callbacks)
-          OS << Callbacks->remapPath(File);
-        else
-          OS << File;
-        OS << ':' << PLoc.getLine() << ':' << PLoc.getColumn();
+          WrittenFile = Callbacks->remapPath(File);
+        // The following tries to fix inconsistent path separator created by
+        // clang::DirectoryLookup::LookupFile when the file path is relative
+        // path.
+        llvm::sys::path::Style Style =
+            !llvm::sys::path::is_absolute(WrittenFile) && Policy.MSVCFormatting
+                ? llvm::sys::path::Style::windows_backslash
+                : llvm::sys::path::Style::native;
+        llvm::sys::path::native(WrittenFile, Style);
+        OS << WrittenFile << ':' << PLoc.getLine() << ':' << PLoc.getColumn();
       }
     }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150817.523171.patch
Type: text/x-patch
Size: 2474 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230517/4f31fd21/attachment.bin>


More information about the cfe-commits mailing list