<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">ClangdTests/FuzzyMatch.Matches has been failing since this commit on a sanitized clang build on MacOS. I've seen some later commits trying to fix it, but the issue is still there. Could you please take a look?</div><div class=""><br class=""></div><div class="">Steps to reproduce in case you need them:</div><div class=""><font face="Menlo" class="">> cmake -G Ninja  -DLIBCXX_SYSROOT=/Path/To/MacOSX.sdk -DCOMPILER_RT_BUILD_BUILTINS=Off -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=Off -DLLVM_USE_SANITIZER="Address;Undefined" -DLLVM_BUILD_RUNTIME=NO /Path/To/llvm</font></div><div class=""><font face="Menlo" class="">> ninja && ninja tools/clang/tools/extra/unittests/clangd/ClangdTests</font></div><div class=""><div class=""><font face="Menlo" class="">> tools/clang/tools/extra/unittests/clangd/ClangdTests</font></div><div class=""><font face="Menlo" class="">[==========] Running 90 tests from 19 test cases.</font></div><div class=""><font face="Menlo" class="">[----------] Global test environment set-up.</font></div><div class=""><font face="Menlo" class="">[----------] 8 tests from ClangdVFSTest</font></div><div class=""><font face="Menlo" class="">[ RUN      ] ClangdVFSTest.Parse</font></div><div class=""><font face="Menlo" class="">[       OK ] ClangdVFSTest.Parse (84 ms)</font></div><div class=""><font face="Menlo" class="">[ RUN      ] ClangdVFSTest.ParseWithHeader</font></div><div class=""><font face="Menlo" class="">[       OK ] ClangdVFSTest.ParseWithHeader (98 ms)</font></div><div class=""><font face="Menlo" class="">[ RUN      ] ClangdVFSTest.Reparse</font></div><div class=""><font face="Menlo" class="">[       OK ] ClangdVFSTest.Reparse (49 ms)</font></div><div class=""><font face="Menlo" class="">[ RUN      ] ClangdVFSTest.ReparseOnHeaderChange</font></div><div class=""><font face="Menlo" class="">[       OK ] ClangdVFSTest.ReparseOnHeaderChange (65 ms)</font></div><div class=""><font face="Menlo" class="">[ RUN      ] ClangdVFSTest.CheckVersions</font></div><div class=""><font face="Menlo" class="">.../tools/extra/clangd/FuzzyMatch.cpp:78:27: runtime error: division by zero</font></div><div class=""><div class=""><font face="Menlo" class="">SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior .../tools/extra/clangd/FuzzyMatch.cpp:78:27 in</font></div><div class=""><font face="Menlo" class="">Abort trap: 6</font></div></div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Michael</div><div><br class=""><blockquote type="cite" class=""><div class="">On Jan 12, 2018, at 10:30 AM, Sam McCall via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Author: sammccall<br class="">Date: Fri Jan 12 10:30:08 2018<br class="">New Revision: 322387<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=322387&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=322387&view=rev</a><br class="">Log:<br class="">[clangd] Code completion uses Sema for NS-level things in the current file.<br class=""><br class="">Summary:<br class="">To stay fast, it avoids deserializing anything outside the current file, by<br class="">disabling the LoadExternal code completion option added in r322377, when the<br class="">index is enabled.<br class=""><br class="">Reviewers: hokein<br class=""><br class="">Subscribers: klimek, ilya-biryukov, cfe-commits<br class=""><br class="">Differential Revision: <a href="https://reviews.llvm.org/D41996" class="">https://reviews.llvm.org/D41996</a><br class=""><br class="">Modified:<br class="">    clang-tools-extra/trunk/clangd/CodeComplete.cpp<br class="">    clang-tools-extra/trunk/clangd/index/FileIndex.cpp<br class="">    clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp<br class=""><br class="">Modified: clang-tools-extra/trunk/clangd/CodeComplete.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=322387&r1=322386&r2=322387&view=diff" class="">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/CodeComplete.cpp?rev=322387&r1=322386&r2=322387&view=diff</a><br class="">==============================================================================<br class="">--- clang-tools-extra/trunk/clangd/CodeComplete.cpp (original)<br class="">+++ clang-tools-extra/trunk/clangd/CodeComplete.cpp Fri Jan 12 10:30:08 2018<br class="">@@ -642,8 +642,10 @@ clang::CodeCompleteOptions CodeCompleteO<br class="">   Result.IncludeGlobals = IncludeGlobals;<br class="">   Result.IncludeBriefComments = IncludeBriefComments;<br class=""><br class="">-  // Enable index-based code completion when Index is provided.<br class="">-  Result.IncludeNamespaceLevelDecls = !Index;<br class="">+  // When an is used, Sema is responsible for completing the main file,<br class="">+  // the index can provide results from the preamble.<br class="">+  // Tell Sema not to deserialize the preamble to look for results.<br class="">+  Result.LoadExternal = !Index;<br class=""><br class="">   return Result;<br class=""> }<br class=""><br class="">Modified: clang-tools-extra/trunk/clangd/index/FileIndex.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/FileIndex.cpp?rev=322387&r1=322386&r2=322387&view=diff" class="">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/FileIndex.cpp?rev=322387&r1=322386&r2=322387&view=diff</a><br class="">==============================================================================<br class="">--- clang-tools-extra/trunk/clangd/index/FileIndex.cpp (original)<br class="">+++ clang-tools-extra/trunk/clangd/index/FileIndex.cpp Fri Jan 12 10:30:08 2018<br class="">@@ -20,6 +20,8 @@ std::unique_ptr<SymbolSlab> indexAST(AST<br class="">                                      std::shared_ptr<Preprocessor> PP,<br class="">                                      llvm::ArrayRef<const Decl *> Decls) {<br class="">   SymbolCollector::Options CollectorOpts;<br class="">+  // Code completion gets main-file results from Sema.<br class="">+  // But we leave this option on because features like go-to-definition want it.<br class="">   CollectorOpts.IndexMainFiles = true;<br class="">   auto Collector = std::make_shared<SymbolCollector>(std::move(CollectorOpts));<br class="">   Collector->setPreprocessor(std::move(PP));<br class=""><br class="">Modified: clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp?rev=322387&r1=322386&r2=322387&view=diff" class="">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp?rev=322387&r1=322386&r2=322387&view=diff</a><br class="">==============================================================================<br class="">--- clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp (original)<br class="">+++ clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp Fri Jan 12 10:30:08 2018<br class="">@@ -57,6 +57,7 @@ using ::testing::Contains;<br class=""> using ::testing::Each;<br class=""> using ::testing::ElementsAre;<br class=""> using ::testing::Not;<br class="">+using ::testing::UnorderedElementsAre;<br class=""><br class=""> class IgnoreDiagnostics : public DiagnosticsConsumer {<br class="">   void<br class="">@@ -104,7 +105,7 @@ CompletionList completions(StringRef Tex<br class="">                       /*StorePreamblesInMemory=*/true);<br class="">   auto File = getVirtualTestFilePath("foo.cpp");<br class="">   Annotations Test(Text);<br class="">-  Server.addDocument(Context::empty(), File, Test.code());<br class="">+  Server.addDocument(Context::empty(), File, Test.code()).wait();<br class="">   auto CompletionList =<br class="">       Server.codeComplete(Context::empty(), File, Test.point(), Opts)<br class="">           .get()<br class="">@@ -506,11 +507,11 @@ TEST(CompletionTest, NoIndex) {<br class="">   Opts.Index = nullptr;<br class=""><br class="">   auto Results = completions(R"cpp(<br class="">-      namespace ns { class No {}; }<br class="">+      namespace ns { class Local {}; }<br class="">       void f() { ns::^ }<br class="">   )cpp",<br class="">                              Opts);<br class="">-  EXPECT_THAT(Results.items, Has("No"));<br class="">+  EXPECT_THAT(Results.items, Has("Local"));<br class=""> }<br class=""><br class=""> TEST(CompletionTest, StaticAndDynamicIndex) {<br class="">@@ -538,13 +539,13 @@ TEST(CompletionTest, SimpleIndexBased) {<br class="">   Opts.Index = I.get();<br class=""><br class="">   auto Results = completions(R"cpp(<br class="">-      namespace ns { class No {}; }<br class="">+      namespace ns { int local; }<br class="">       void f() { ns::^ }<br class="">   )cpp",<br class="">                              Opts);<br class="">   EXPECT_THAT(Results.items, Has("XYZ", CompletionItemKind::Class));<br class="">   EXPECT_THAT(Results.items, Has("foo", CompletionItemKind::Function));<br class="">-  EXPECT_THAT(Results.items, Not(Has("No")));<br class="">+  EXPECT_THAT(Results.items, Has("local"));<br class=""> }<br class=""><br class=""> TEST(CompletionTest, IndexBasedWithFilter) {<br class="">@@ -585,6 +586,41 @@ TEST(CompletionTest, FullyQualifiedScope<br class="">   EXPECT_THAT(Results.items, Has("XYZ", CompletionItemKind::Class));<br class=""> }<br class=""><br class="">+TEST(CompletionTest, IndexSuppressesPreambleCompletions) {<br class="">+  MockFSProvider FS;<br class="">+  MockCompilationDatabase CDB;<br class="">+  IgnoreDiagnostics DiagConsumer;<br class="">+  ClangdServer Server(CDB, DiagConsumer, FS, getDefaultAsyncThreadsCount(),<br class="">+                      /*StorePreamblesInMemory=*/true);<br class="">+<br class="">+  FS.Files[getVirtualTestFilePath("bar.h")] =<br class="">+      R"cpp(namespace ns { int preamble; })cpp";<br class="">+  auto File = getVirtualTestFilePath("foo.cpp");<br class="">+  Annotations Test(R"cpp(<br class="">+      #include "bar.h"<br class="">+      namespace ns { int local; }<br class="">+      void f() { ns::^ }<br class="">+  )cpp");<br class="">+  Server.addDocument(Context::empty(), File, Test.code()).wait();<br class="">+  clangd::CodeCompleteOptions Opts = {};<br class="">+<br class="">+  auto WithoutIndex =<br class="">+      Server.codeComplete(Context::empty(), File, Test.point(), Opts)<br class="">+          .get()<br class="">+          .second.Value;<br class="">+  EXPECT_THAT(WithoutIndex.items,<br class="">+              UnorderedElementsAre(Named("local"), Named("preamble")));<br class="">+<br class="">+  auto I = simpleIndexFromSymbols({{"ns::index", index::SymbolKind::Variable}});<br class="">+  Opts.Index = I.get();<br class="">+  auto WithIndex =<br class="">+      Server.codeComplete(Context::empty(), File, Test.point(), Opts)<br class="">+          .get()<br class="">+          .second.Value;<br class="">+  EXPECT_THAT(WithIndex.items,<br class="">+              UnorderedElementsAre(Named("local"), Named("index")));<br class="">+}<br class="">+<br class=""> TEST(CompletionTest, ASTIndexMultiFile) {<br class="">   MockFSProvider FS;<br class="">   MockCompilationDatabase CDB;<br class=""><br class=""><br class="">_______________________________________________<br class="">cfe-commits mailing list<br class=""><a href="mailto:cfe-commits@lists.llvm.org" class="">cfe-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits<br class=""></div></div></blockquote></div><br class=""></div></body></html>