diff options
author | Adrian Prantl <aprantl@apple.com> | 2019-10-21 16:44:37 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2019-10-21 16:44:37 +0000 |
commit | 14947e8df1c27d3babf2c01b53c0c2bf2bfb9bd1 (patch) | |
tree | 635f4a4833f1b809441f7783d7f9032fdc0fce49 | |
parent | c78da41cdae532adb51d10ed73482642881346dd (diff) | |
download | clang-14947e8df1c27d3babf2c01b53c0c2bf2bfb9bd1.tar.gz |
PCH debug info: Avoid appending the source directory to an absolute path
When building a precompiled header in -fmodule-format=obj (i.e.,
`-gmodules) in an absolute path, the locig in
CGDebugInfo::createCompileUnit would unconditionally append the source
directory to the -main-file-name. This patch avoids that behavior for
absolute paths.
rdar://problem/46045865
Differential Revision: https://reviews.llvm.org/D69213
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@375423 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 6 | ||||
-rw-r--r-- | test/PCH/debug-info-pch-container-path.c | 22 |
2 files changed, 25 insertions, 3 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 294d54e378..7c63743f3b 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -539,11 +539,11 @@ void CGDebugInfo::CreateCompileUnit() { // file to determine the real absolute path for the file. std::string MainFileDir; if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) { - MainFileDir = remapDIPath(MainFile->getDir()->getName()); - if (MainFileDir != ".") { + MainFileDir = MainFile->getDir()->getName(); + if (!llvm::sys::path::is_absolute(MainFileName)) { llvm::SmallString<1024> MainFileDirSS(MainFileDir); llvm::sys::path::append(MainFileDirSS, MainFileName); - MainFileName = MainFileDirSS.str(); + MainFileName = llvm::sys::path::remove_leading_dotslash(MainFileDirSS); } // If the main file name provided is identical to the input file name, and // if the input file is a preprocessed source, use the module name for diff --git a/test/PCH/debug-info-pch-container-path.c b/test/PCH/debug-info-pch-container-path.c new file mode 100644 index 0000000000..efe49e48e2 --- /dev/null +++ b/test/PCH/debug-info-pch-container-path.c @@ -0,0 +1,22 @@ +// REQUIRES: asserts + +// Modules: +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: cd %t + +// RUN: %clang_cc1 -fmodule-format=obj -emit-pch \ +// RUN: -triple %itanium_abi_triple \ +// RUN: -fdebug-prefix-map=%t=BUILD \ +// RUN: -fdebug-prefix-map=%S=SOURCE \ +// RUN: -o %t/prefix.ll %S/debug-info-limited-struct.h \ +// RUN: -mllvm -debug-only=pchcontainer &>%t-container.ll +// RUN: cat %t-container.ll | FileCheck %s + +// CHECK: distinct !DICompileUnit( +// CHECK-SAME: language: DW_LANG_C99, +// CHECK-SAME: file: ![[FILE:[0-9]+]], +// CHECK: ![[FILE]] = !DIFile( +// CHECK-SAME: filename: "SOURCE/debug-info-limited-struct.h", +// CHECK-SAME: directory: "BUILD" + |