Revert "Avoid emitting redundant or unusable directories in DIFile metadata entries."
This reverts commit r348154 and follow-up commits r348211 and r3248213.
Reason: the original commit broke compiler-rt tests and a follow-up fix
(r348203) broke our integrate and was reverted.
llvm-svn: 348280
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index c556996..3492fba 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -181,7 +181,8 @@
SourceManager &SM = CGM.getContext().getSourceManager();
auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back());
PresumedLoc PCLoc = SM.getPresumedLoc(CurLoc);
- if (PCLoc.isInvalid() || Scope->getFile() == getOrCreateFile(CurLoc))
+
+ if (PCLoc.isInvalid() || Scope->getFilename() == PCLoc.getFilename())
return;
if (auto *LBF = dyn_cast<llvm::DILexicalBlockFile>(Scope)) {
@@ -409,13 +410,13 @@
SourceManager &SM = CGM.getContext().getSourceManager();
PresumedLoc PLoc = SM.getPresumedLoc(Loc);
- StringRef FileName = PLoc.getFilename();
- if (PLoc.isInvalid() || FileName.empty())
+ if (PLoc.isInvalid() || StringRef(PLoc.getFilename()).empty())
// If the location is not valid then use main input file.
return getOrCreateMainFile();
// Cache the results.
- auto It = DIFileCache.find(FileName.data());
+ const char *fname = PLoc.getFilename();
+ auto It = DIFileCache.find(fname);
if (It != DIFileCache.end()) {
// Verify that the information still exists.
@@ -430,41 +431,11 @@
if (CSKind)
CSInfo.emplace(*CSKind, Checksum);
- StringRef Dir;
- StringRef File;
- std::string RemappedFile = remapDIPath(FileName);
- std::string CurDir = remapDIPath(getCurrentDirname());
- SmallString<128> DirBuf;
- SmallString<128> FileBuf;
- if (llvm::sys::path::is_absolute(RemappedFile)) {
- // Strip the common prefix (if it is more than just "/") from current
- // directory and FileName for a more space-efficient encoding.
- auto FileIt = llvm::sys::path::begin(RemappedFile);
- auto FileE = llvm::sys::path::end(RemappedFile);
- auto CurDirIt = llvm::sys::path::begin(CurDir);
- auto CurDirE = llvm::sys::path::end(CurDir);
- for (; CurDirIt != CurDirE && *CurDirIt == *FileIt; ++CurDirIt, ++FileIt)
- llvm::sys::path::append(DirBuf, *CurDirIt);
- if (std::distance(llvm::sys::path::begin(CurDir), CurDirIt) == 1) {
- // The common prefix only the root; stripping it would cause
- // LLVM diagnostic locations to be more confusing.
- Dir = {};
- File = RemappedFile;
- } else {
- for (; FileIt != FileE; ++FileIt)
- llvm::sys::path::append(FileBuf, *FileIt);
- Dir = DirBuf;
- File = FileBuf;
- }
- } else {
- Dir = CurDir;
- File = RemappedFile;
- }
- llvm::DIFile *F =
- DBuilder.createFile(File, Dir, CSInfo,
- getSource(SM, SM.getFileID(Loc)));
+ llvm::DIFile *F = DBuilder.createFile(
+ remapDIPath(PLoc.getFilename()), remapDIPath(getCurrentDirname()), CSInfo,
+ getSource(SM, SM.getFileID(Loc)));
- DIFileCache[FileName.data()].reset(F);
+ DIFileCache[fname].reset(F);
return F;
}