keith created this revision. keith requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Previously if you passed an absolute path to clang, where only part of the path to the file was remapped, it would result in the file's DIFile being stored with a duplicate path, for example: !DIFile(filename: "./ios/Sources/bar.c", directory: "./ios/Sources") This change handles absolute paths, specifically in the case they are remapped to something relative, and uses the dirname for the directory, and basename for the filename. This also adds a test verifying this behavior for more standard uses as well. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D111352 Files: clang/lib/CodeGen/CGDebugInfo.cpp clang/test/CodeGen/relative-debug-prefix-map.c Index: clang/test/CodeGen/relative-debug-prefix-map.c =================================================================== --- /dev/null +++ clang/test/CodeGen/relative-debug-prefix-map.c @@ -0,0 +1,17 @@ +// RUN: mkdir -p %t.nested/dir && cd %t.nested/dir +// RUN: cp %s %t.nested/dir/main.c +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%t.nested=. %t.nested/dir/main.c -emit-llvm -o - | FileCheck %s +// +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=. %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-DIRECT +// +// RUN: cd %p +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-compilation-dir=. relative-debug-prefix-map.c -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-DIRECT + +// CHECK: !DIFile(filename: "main.c", directory: "./dir") +// CHECK-DIRECT: !DIFile(filename: "relative-debug-prefix-map.c", directory: ".") + +int main(int argc, char **argv) { + (void)argc; + (void)argv; + return 0; +} Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -446,6 +446,9 @@ Dir = DirBuf; File = FileBuf; } + } else if (llvm::sys::path::is_absolute(FileName)) { + Dir = llvm::sys::path::parent_path(RemappedFile); + File = llvm::sys::path::filename(RemappedFile); } else { Dir = CurDir; File = RemappedFile;
Index: clang/test/CodeGen/relative-debug-prefix-map.c =================================================================== --- /dev/null +++ clang/test/CodeGen/relative-debug-prefix-map.c @@ -0,0 +1,17 @@ +// RUN: mkdir -p %t.nested/dir && cd %t.nested/dir +// RUN: cp %s %t.nested/dir/main.c +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%t.nested=. %t.nested/dir/main.c -emit-llvm -o - | FileCheck %s +// +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-prefix-map=%p=. %s -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-DIRECT +// +// RUN: cd %p +// RUN: %clang_cc1 -debug-info-kind=standalone -fdebug-compilation-dir=. relative-debug-prefix-map.c -emit-llvm -o - | FileCheck %s --check-prefix=CHECK-DIRECT + +// CHECK: !DIFile(filename: "main.c", directory: "./dir") +// CHECK-DIRECT: !DIFile(filename: "relative-debug-prefix-map.c", directory: ".") + +int main(int argc, char **argv) { + (void)argc; + (void)argv; + return 0; +} Index: clang/lib/CodeGen/CGDebugInfo.cpp =================================================================== --- clang/lib/CodeGen/CGDebugInfo.cpp +++ clang/lib/CodeGen/CGDebugInfo.cpp @@ -446,6 +446,9 @@ Dir = DirBuf; File = FileBuf; } + } else if (llvm::sys::path::is_absolute(FileName)) { + Dir = llvm::sys::path::parent_path(RemappedFile); + File = llvm::sys::path::filename(RemappedFile); } else { Dir = CurDir; File = RemappedFile;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits