Should be fixed in r348211. -- adrian
> On Dec 3, 2018, at 3:07 PM, Adrian Prantl via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > No, your failures are Windows-specific (/ vs \), and I haven't fixed them > yet. Thanks for letting me know! > > -- adrian > >> On Dec 3, 2018, at 3:06 PM, Galina Kistanova <gkistan...@gmail.com> wrote: >> >> Adrian, did not see your response, please ignore my email. >> >> Thanks >> >> Galina >> >> On Mon, Dec 3, 2018 at 3:04 PM Galina Kistanova <gkistan...@gmail.com> wrote: >> Hello Adrian, >> >> This commit broke tests on couple of our builders: >> >> http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/14371 >> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast >> >> . . . >> Failing Tests (2): >> Clang :: CodeGen/debug-prefix-map.c >> Clang :: Modules/module-debuginfo-prefix.m >> >> The builders were already red and no notifications were sent on this. >> Please have a look? >> >> Thanks >> >> Galina >> >> On Mon, Dec 3, 2018 at 9:58 AM Adrian Prantl via cfe-commits >> <cfe-commits@lists.llvm.org> wrote: >> Author: adrian >> Date: Mon Dec 3 09:55:27 2018 >> New Revision: 348154 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=348154&view=rev >> Log: >> Avoid emitting redundant or unusable directories in DIFile metadata entries. >> >> As discussed on llvm-dev recently, Clang currently emits redundant >> directories in DIFile entries, such as >> >> .file 1 "/Volumes/Data/llvm" >> "/Volumes/Data/llvm/tools/clang/test/CodeGen/debug-info-abspath.c" >> >> This patch looks at any common prefix between the compilation >> directory and the (absolute) file path and strips the redundant >> part. More importantly it leaves the compilation directory empty if >> the two paths have no common prefix. >> >> After this patch the above entry is (assuming a compilation dir of >> "/Volumes/Data/llvm/_build"): >> >> .file 1 "/Volumes/Data/llvm" >> "tools/clang/test/CodeGen/debug-info-abspath.c" >> >> When building the FileCheck binary with debug info, this patch makes >> the build artifacts ~1kb smaller. >> >> Differential Revision: https://reviews.llvm.org/D55085 >> >> Added: >> cfe/trunk/test/CodeGen/debug-info-abspath.c >> Modified: >> cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> cfe/trunk/lib/CodeGen/CodeGenAction.cpp >> cfe/trunk/test/CodeGen/debug-prefix-map.c >> cfe/trunk/test/Modules/module-debuginfo-prefix.m >> >> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=348154&r1=348153&r2=348154&view=diff >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Mon Dec 3 09:55:27 2018 >> @@ -181,8 +181,7 @@ void CGDebugInfo::setLocation(SourceLoca >> SourceManager &SM = CGM.getContext().getSourceManager(); >> auto *Scope = cast<llvm::DIScope>(LexicalBlockStack.back()); >> PresumedLoc PCLoc = SM.getPresumedLoc(CurLoc); >> - >> - if (PCLoc.isInvalid() || Scope->getFilename() == PCLoc.getFilename()) >> + if (PCLoc.isInvalid() || Scope->getFile() == getOrCreateFile(CurLoc)) >> return; >> >> if (auto *LBF = dyn_cast<llvm::DILexicalBlockFile>(Scope)) { >> @@ -410,13 +409,13 @@ llvm::DIFile *CGDebugInfo::getOrCreateFi >> SourceManager &SM = CGM.getContext().getSourceManager(); >> PresumedLoc PLoc = SM.getPresumedLoc(Loc); >> >> - if (PLoc.isInvalid() || StringRef(PLoc.getFilename()).empty()) >> + StringRef FileName = PLoc.getFilename(); >> + if (PLoc.isInvalid() || FileName.empty()) >> // If the location is not valid then use main input file. >> return getOrCreateMainFile(); >> >> // Cache the results. >> - const char *fname = PLoc.getFilename(); >> - auto It = DIFileCache.find(fname); >> + auto It = DIFileCache.find(FileName.data()); >> >> if (It != DIFileCache.end()) { >> // Verify that the information still exists. >> @@ -431,11 +430,41 @@ llvm::DIFile *CGDebugInfo::getOrCreateFi >> if (CSKind) >> CSInfo.emplace(*CSKind, Checksum); >> >> - llvm::DIFile *F = DBuilder.createFile( >> - remapDIPath(PLoc.getFilename()), remapDIPath(getCurrentDirname()), >> CSInfo, >> - getSource(SM, SM.getFileID(Loc))); >> + 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))); >> >> - DIFileCache[fname].reset(F); >> + DIFileCache[FileName.data()].reset(F); >> return F; >> } >> >> >> Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=348154&r1=348153&r2=348154&view=diff >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Dec 3 09:55:27 2018 >> @@ -549,12 +549,16 @@ const FullSourceLoc BackendConsumer::get >> SourceLocation DILoc; >> >> if (D.isLocationAvailable()) { >> - D.getLocation(&Filename, &Line, &Column); >> - const FileEntry *FE = FileMgr.getFile(Filename); >> - if (FE && Line > 0) { >> - // If -gcolumn-info was not used, Column will be 0. This upsets the >> - // source manager, so pass 1 if Column is not set. >> - DILoc = SourceMgr.translateFileLineCol(FE, Line, Column ? Column : 1); >> + D.getLocation(Filename, Line, Column); >> + if (Line > 0) { >> + const FileEntry *FE = FileMgr.getFile(Filename); >> + if (!FE) >> + FE = FileMgr.getFile(D.getAbsolutePath()); >> + if (FE) { >> + // If -gcolumn-info was not used, Column will be 0. This upsets the >> + // source manager, so pass 1 if Column is not set. >> + DILoc = SourceMgr.translateFileLineCol(FE, Line, Column ? Column : >> 1); >> + } >> } >> BadDebugInfo = DILoc.isInvalid(); >> } >> >> Added: cfe/trunk/test/CodeGen/debug-info-abspath.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-info-abspath.c?rev=348154&view=auto >> ============================================================================== >> --- cfe/trunk/test/CodeGen/debug-info-abspath.c (added) >> +++ cfe/trunk/test/CodeGen/debug-info-abspath.c Mon Dec 3 09:55:27 2018 >> @@ -0,0 +1,15 @@ >> +// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ >> +// RUN: %s -emit-llvm -o - | FileCheck %s >> + >> +// RUN: cp %s %t.c >> +// RUN: %clang_cc1 -debug-info-kind=limited -triple %itanium_abi_triple \ >> +// RUN: %t.c -emit-llvm -o - | FileCheck %s --check-prefix=INTREE >> +void foo() {} >> + >> +// Since %s is an absolute path, directory should be a nonempty >> +// prefix, but the CodeGen part should be part of the filename. >> + >> +// CHECK: DIFile(filename: "{{.*}}CodeGen{{.*}}debug-info-abspath.c" >> +// CHECK-SAME: directory: "{{.+}}") >> + >> +// INTREE: DIFile({{.*}}directory: "{{.+}}CodeGen{{.*}}") >> >> Modified: cfe/trunk/test/CodeGen/debug-prefix-map.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/debug-prefix-map.c?rev=348154&r1=348153&r2=348154&view=diff >> ============================================================================== >> --- cfe/trunk/test/CodeGen/debug-prefix-map.c (original) >> +++ cfe/trunk/test/CodeGen/debug-prefix-map.c Mon Dec 3 09:55:27 2018 >> @@ -17,18 +17,22 @@ void test_rewrite_includes() { >> } >> >> // CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: "/var/empty{{/|\\5C}}<stdin>" >> -// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: "/var/empty{{[/\\]}}{{.*}}" >> -// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: >> "/var/empty{{[/\\]}}Inputs/stdio.h" >> +// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: "/var/empty{{[/\\]}}{{.*}}", >> +// CHECK-NO-MAIN-FILE-NAME-SAME: directory: "") >> +// CHECK-NO-MAIN-FILE-NAME: !DIFile(filename: >> "/var/empty{{[/\\]}}Inputs/stdio.h", >> +// CHECK-NO-MAIN-FILE-NAME-SAME: directory: "") >> // CHECK-NO-MAIN-FILE-NAME-NOT: !DIFile(filename: >> >> // CHECK-EVIL: !DIFile(filename: "/var=empty{{[/\\]}}{{.*}}" >> -// CHECK-EVIL: !DIFile(filename: "/var=empty{{[/\\]}}Inputs/stdio.h" >> +// CHECK-EVIL: !DIFile(filename: "/var=empty{{[/\\]}}{{.*}}Inputs/stdio.h", >> +// CHECK-EVIL-SAME: directory: "") >> // CHECK-EVIL-NOT: !DIFile(filename: >> >> // CHECK: !DIFile(filename: "/var/empty{{[/\\]}}{{.*}}" >> -// CHECK: !DIFile(filename: "/var/empty{{[/\\]}}Inputs/stdio.h" >> +// CHECK: !DIFile(filename: "/var/empty{{[/\\]}}{{.*}}Inputs/stdio.h", >> +// CHECK-SAME: directory: "") >> // CHECK-NOT: !DIFile(filename: >> >> -// CHECK-COMPILATION-DIR: !DIFile(filename: "/var/empty{{[/\\]}}{{.*}}", >> directory: "/var/empty") >> -// CHECK-COMPILATION-DIR: !DIFile(filename: >> "/var/empty{{[/\\]}}Inputs/stdio.h", directory: "/var/empty") >> +// CHECK-COMPILATION-DIR: !DIFile(filename: "{{.*}}", directory: >> "/var/empty") >> +// CHECK-COMPILATION-DIR: !DIFile(filename: "Inputs/stdio.h", directory: >> "/var/empty") >> // CHECK-COMPILATION-DIR-NOT: !DIFile(filename: >> >> Modified: cfe/trunk/test/Modules/module-debuginfo-prefix.m >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/module-debuginfo-prefix.m?rev=348154&r1=348153&r2=348154&view=diff >> ============================================================================== >> --- cfe/trunk/test/Modules/module-debuginfo-prefix.m (original) >> +++ cfe/trunk/test/Modules/module-debuginfo-prefix.m Mon Dec 3 09:55:27 2018 >> @@ -20,4 +20,4 @@ >> @import DebugObjC; >> #endif >> >> -// CHECK: !DIFile({{.*}}"/OVERRIDE/DebugObjC.h" >> +// CHECK: !DIFile(filename: "/OVERRIDE/DebugObjC.h", directory: "") >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits