Hi Jan, This patch seems to assume VFS will only re-map some paths, but still point into the physical filesystem. This may not be the case, e.g. in unit tests.
This also manages to break some of our internal clang-tidy integrations for obscure reasons. Can we instead just pass VFS instance to the SanitizerBlacklist and use relative paths? We might also need to revert the patch to unbreak our release, sorry about the inconvenience. On Tue, Oct 8, 2019 at 3:11 AM Jan Korous via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: jkorous > Date: Mon Oct 7 18:13:17 2019 > New Revision: 374006 > > URL: http://llvm.org/viewvc/llvm-project?rev=374006&view=rev > Log: > Reland 'Add VFS support for sanitizers' blacklist' > > The original patch broke the test for Windows. > Trying to fix as per Reid's suggestions outlined here: > https://reviews.llvm.org/rC371663 > > Differential Revision: https://reviews.llvm.org/D67742 > > Added: > cfe/trunk/test/CodeGen/Inputs/sanitizer-blacklist-vfsoverlay.yaml > Modified: > cfe/trunk/lib/AST/ASTContext.cpp > cfe/trunk/test/CodeGen/ubsan-blacklist.c > > Modified: cfe/trunk/lib/AST/ASTContext.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=374006&r1=374005&r2=374006&view=diff > > ============================================================================== > --- cfe/trunk/lib/AST/ASTContext.cpp (original) > +++ cfe/trunk/lib/AST/ASTContext.cpp Mon Oct 7 18:13:17 2019 > @@ -72,6 +72,7 @@ > #include "llvm/ADT/PointerUnion.h" > #include "llvm/ADT/STLExtras.h" > #include "llvm/ADT/SmallPtrSet.h" > +#include "llvm/ADT/SmallString.h" > #include "llvm/ADT/SmallVector.h" > #include "llvm/ADT/StringExtras.h" > #include "llvm/ADT/StringRef.h" > @@ -81,6 +82,7 @@ > #include "llvm/Support/Compiler.h" > #include "llvm/Support/ErrorHandling.h" > #include "llvm/Support/MathExtras.h" > +#include "llvm/Support/VirtualFileSystem.h" > #include "llvm/Support/raw_ostream.h" > #include <algorithm> > #include <cassert> > @@ -826,6 +828,18 @@ static bool isAddrSpaceMapManglingEnable > llvm_unreachable("getAddressSpaceMapMangling() doesn't cover > anything."); > } > > +static std::vector<std::string> > +getRealPaths(llvm::vfs::FileSystem &VFS, llvm::ArrayRef<std::string> > Paths) { > + std::vector<std::string> Result; > + llvm::SmallString<128> Buffer; > + for (const auto &File : Paths) { > + if (std::error_code EC = VFS.getRealPath(File, Buffer)) > + llvm::report_fatal_error("can't open file '" + File + "': " + > EC.message()); > + Result.push_back(Buffer.str()); > + } > + return Result; > +} > + > ASTContext::ASTContext(LangOptions &LOpts, SourceManager &SM, > IdentifierTable &idents, SelectorTable &sels, > Builtin::Context &builtins) > @@ -833,7 +847,10 @@ ASTContext::ASTContext(LangOptions &LOpt > TemplateSpecializationTypes(this_()), > DependentTemplateSpecializationTypes(this_()), > SubstTemplateTemplateParmPacks(this_()), SourceMgr(SM), > LangOpts(LOpts), > - SanitizerBL(new > SanitizerBlacklist(LangOpts.SanitizerBlacklistFiles, SM)), > + SanitizerBL(new SanitizerBlacklist( > + getRealPaths(SM.getFileManager().getVirtualFileSystem(), > + LangOpts.SanitizerBlacklistFiles), > + SM)), > XRayFilter(new > XRayFunctionFilter(LangOpts.XRayAlwaysInstrumentFiles, > LangOpts.XRayNeverInstrumentFiles, > LangOpts.XRayAttrListFiles, SM)), > > Added: cfe/trunk/test/CodeGen/Inputs/sanitizer-blacklist-vfsoverlay.yaml > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/Inputs/sanitizer-blacklist-vfsoverlay.yaml?rev=374006&view=auto > > ============================================================================== > --- cfe/trunk/test/CodeGen/Inputs/sanitizer-blacklist-vfsoverlay.yaml > (added) > +++ cfe/trunk/test/CodeGen/Inputs/sanitizer-blacklist-vfsoverlay.yaml Mon > Oct 7 18:13:17 2019 > @@ -0,0 +1,15 @@ > +{ > + 'version': 0, > + 'roots': [ > + { 'name': '@DIR@', 'type': 'directory', > + 'contents': [ > + { 'name': 'only-virtual-file.blacklist', 'type': 'file', > + 'external-contents': '@REAL_FILE@' > + }, > + { 'name': 'invalid-virtual-file.blacklist', 'type': 'file', > + 'external-contents': '@NONEXISTENT_FILE@' > + } > + ] > + } > + ] > +} > > Modified: cfe/trunk/test/CodeGen/ubsan-blacklist.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/ubsan-blacklist.c?rev=374006&r1=374005&r2=374006&view=diff > > ============================================================================== > --- cfe/trunk/test/CodeGen/ubsan-blacklist.c (original) > +++ cfe/trunk/test/CodeGen/ubsan-blacklist.c Mon Oct 7 18:13:17 2019 > @@ -5,6 +5,17 @@ > // RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow > -fsanitize-blacklist=%t-func.blacklist -emit-llvm %s -o - | FileCheck %s > --check-prefix=FUNC > // RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow > -fsanitize-blacklist=%t-file.blacklist -emit-llvm %s -o - | FileCheck %s > --check-prefix=FILE > > +// RUN: rm -f %t-vfsoverlay.yaml > +// RUN: rm -f %t-nonexistent.blacklist > +// RUN: sed -e "s|@DIR@|%/T|g" > %S/Inputs/sanitizer-blacklist-vfsoverlay.yaml | sed -e > "s|@REAL_FILE@|%/t-func.blacklist|g" > | sed -e "s|@NONEXISTENT_FILE@|%/t-nonexistent.blacklist|g" > > %t-vfsoverlay.yaml > +// RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow -ivfsoverlay > %t-vfsoverlay.yaml -fsanitize-blacklist=%T/only-virtual-file.blacklist > -emit-llvm %s -o - | FileCheck %s --check-prefix=FUNC > + > +// RUN: not %clang_cc1 -fsanitize=unsigned-integer-overflow -ivfsoverlay > %t-vfsoverlay.yaml -fsanitize-blacklist=%T/invalid-virtual-file.blacklist > -emit-llvm %s -o - 2>&1 | FileCheck %s --check-prefix=INVALID-MAPPED-FILE > +// INVALID-MAPPED-FILE: invalid-virtual-file.blacklist': No such file or > directory > + > +// RUN: not %clang_cc1 -fsanitize=unsigned-integer-overflow -ivfsoverlay > %t-vfsoverlay.yaml -fsanitize-blacklist=%t-nonexistent.blacklist -emit-llvm > %s -o - 2>&1 | FileCheck %s --check-prefix=INVALID > +// INVALID: nonexistent.blacklist': No such file or directory > + > unsigned i; > > // DEFAULT: @hash > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > -- Regards, Ilya Biryukov
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits