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

llvm-svn: 375423
This commit is contained in:
Adrian Prantl 2019-10-21 16:44:37 +00:00
parent 7a79e10a82
commit 122e7af03d
2 changed files with 25 additions and 3 deletions

View File

@ -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

View File

@ -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"