Hi Ilya, This commit broke some of ARM's bots, log are available here:
http://lab.llvm.org:8011/builders/clang-cmake-armv7-quick/builds/3120/steps/ninja%20check%201/logs/stdio Thanks Yvan On Tue, 14 Aug 2018 at 11:37, Phabricator via Phabricator via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > This revision was automatically updated to reflect the committed changes. > Closed by commit rL339665: [clangd] Show non-instantiated decls in > signatureHelp (authored by ibiryukov, committed by ). > Herald added a subscriber: llvm-commits. > > Repository: > rL LLVM > > https://reviews.llvm.org/D50645 > > Files: > clang-tools-extra/trunk/clangd/CodeComplete.cpp > clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp > > > Index: clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp > =================================================================== > --- clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp > +++ clang-tools-extra/trunk/unittests/clangd/CodeCompleteTests.cpp > @@ -1537,6 +1537,59 @@ > EXPECT_EQ(0, Results.activeParameter); > } > > +TEST(SignatureHelpTest, InstantiatedSignatures) { > + EXPECT_THAT(signatures(R"cpp( > + template <class T> > + void foo(T, T, T); > + > + int main() { > + foo<int>(^); > + } > + )cpp") > + .signatures, > + ElementsAre(Sig("foo(T, T, T) -> void", {"T", "T", "T"}))); > + > + EXPECT_THAT(signatures(R"cpp( > + template <class T> > + void foo(T, T, T); > + > + int main() { > + foo(10, ^); > + })cpp") > + .signatures, > + ElementsAre(Sig("foo(T, T, T) -> void", {"T", "T", "T"}))); > + > + EXPECT_THAT(signatures(R"cpp( > + template <class ...T> > + void foo(T...); > + > + int main() { > + foo<int>(^); > + } > + )cpp") > + .signatures, > + ElementsAre(Sig("foo(T...) -> void", {"T..."}))); > + > + // It is debatable whether we should substitute the outer template > parameter > + // ('T') in that case. Currently we don't substitute it in signature help, > but > + // do substitute in code complete. > + // FIXME: make code complete and signature help consistent, figure out > which > + // way is better. > + EXPECT_THAT(signatures(R"cpp( > + template <class T> > + struct X { > + template <class U> > + void foo(T, U); > + }; > + > + int main() { > + X<int>().foo<double>(^) > + } > + )cpp") > + .signatures, > + ElementsAre(Sig("foo(T, U) -> void", {"T", "U"}))); > +} > + > } // namespace > } // namespace clangd > } // namespace clang > Index: clang-tools-extra/trunk/clangd/CodeComplete.cpp > =================================================================== > --- clang-tools-extra/trunk/clangd/CodeComplete.cpp > +++ clang-tools-extra/trunk/clangd/CodeComplete.cpp > @@ -714,7 +714,15 @@ > "too many arguments"); > SigHelp.activeParameter = static_cast<int>(CurrentArg); > for (unsigned I = 0; I < NumCandidates; ++I) { > - const auto &Candidate = Candidates[I]; > + OverloadCandidate Candidate = Candidates[I]; > + // We want to avoid showing instantiated signatures, because they may > be > + // long in some cases (e.g. when 'T' is substituted with > 'std::string', we > + // would get 'std::basic_string<char>'). > + if (auto *Func = Candidate.getFunction()) { > + if (auto *Pattern = Func->getTemplateInstantiationPattern()) > + Candidate = OverloadCandidate(Pattern); > + } > + > const auto *CCS = Candidate.CreateSignatureString( > CurrentArg, S, *Allocator, CCTUInfo, true); > assert(CCS && "Expected the CodeCompletionString to be non-null"); > > > _______________________________________________ > 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