diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/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; diff --git a/clang/test/CodeGen/relative-debug-prefix-map.c b/clang/test/CodeGen/relative-debug-prefix-map.c new file mode 100644 --- /dev/null +++ b/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; +}