Index: include/clang/Parse/Parser.h =================================================================== --- include/clang/Parse/Parser.h +++ include/clang/Parse/Parser.h @@ -2965,6 +2965,10 @@ void CodeCompleteMacroArgument(IdentifierInfo *Macro, MacroInfo *MacroInfo, unsigned ArgumentIndex) override; void CodeCompleteNaturalLanguage() override; + + /// Gets set to true after calling CodeCompleteCall, it is for a hack to make + /// signature help working even when it is triggered inside a token. + bool CalledOverloadCompletion = false; }; } // end namespace clang Index: lib/Parse/ParseExpr.cpp =================================================================== --- lib/Parse/ParseExpr.cpp +++ lib/Parse/ParseExpr.cpp @@ -1648,6 +1648,10 @@ Actions.CodeCompleteCall(getCurScope(), LHS.get(), ArgExprs); })) { (void)Actions.CorrectDelayedTyposInExpr(LHS); + if (PP.isCodeCompletionReached() && !CalledOverloadCompletion) { + Actions.CodeCompleteCall(getCurScope(), LHS.get(), ArgExprs); + CalledOverloadCompletion = true; + } LHS = ExprError(); } else if (LHS.isInvalid()) { for (auto &E : ArgExprs) @@ -2813,6 +2817,7 @@ Completer(); else Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_Expression); + CalledOverloadCompletion = true; cutOffParsing(); return true; }