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