diff options
Diffstat (limited to 'lib/ASTMatchers/Dynamic')
-rw-r--r-- | lib/ASTMatchers/Dynamic/Diagnostics.cpp | 8 | ||||
-rw-r--r-- | lib/ASTMatchers/Dynamic/Marshallers.h | 22 | ||||
-rw-r--r-- | lib/ASTMatchers/Dynamic/Parser.cpp | 2 | ||||
-rw-r--r-- | lib/ASTMatchers/Dynamic/Registry.cpp | 120 | ||||
-rw-r--r-- | lib/ASTMatchers/Dynamic/VariantValue.cpp | 2 |
5 files changed, 91 insertions, 63 deletions
diff --git a/lib/ASTMatchers/Dynamic/Diagnostics.cpp b/lib/ASTMatchers/Dynamic/Diagnostics.cpp index 72f1271..787b780 100644 --- a/lib/ASTMatchers/Dynamic/Diagnostics.cpp +++ b/lib/ASTMatchers/Dynamic/Diagnostics.cpp @@ -23,14 +23,14 @@ Diagnostics::ArgStream Diagnostics::pushContextFrame(ContextType Type, Diagnostics::Context::Context(ConstructMatcherEnum, Diagnostics *Error, StringRef MatcherName, - const SourceRange &MatcherRange) + SourceRange MatcherRange) : Error(Error) { Error->pushContextFrame(CT_MatcherConstruct, MatcherRange) << MatcherName; } Diagnostics::Context::Context(MatcherArgEnum, Diagnostics *Error, StringRef MatcherName, - const SourceRange &MatcherRange, + SourceRange MatcherRange, unsigned ArgNumber) : Error(Error) { Error->pushContextFrame(CT_MatcherArg, MatcherRange) << ArgNumber @@ -63,7 +63,7 @@ Diagnostics::ArgStream &Diagnostics::ArgStream::operator<<(const Twine &Arg) { return *this; } -Diagnostics::ArgStream Diagnostics::addError(const SourceRange &Range, +Diagnostics::ArgStream Diagnostics::addError(SourceRange Range, ErrorType Error) { Errors.emplace_back(); ErrorContent &Last = Errors.back(); @@ -150,7 +150,7 @@ static void formatErrorString(StringRef FormatString, } } -static void maybeAddLineAndColumn(const SourceRange &Range, +static void maybeAddLineAndColumn(SourceRange Range, llvm::raw_ostream &OS) { if (Range.Start.Line > 0 && Range.Start.Column > 0) { OS << Range.Start.Line << ":" << Range.Start.Column << ": "; diff --git a/lib/ASTMatchers/Dynamic/Marshallers.h b/lib/ASTMatchers/Dynamic/Marshallers.h index 36a6415..64d6b78 100644 --- a/lib/ASTMatchers/Dynamic/Marshallers.h +++ b/lib/ASTMatchers/Dynamic/Marshallers.h @@ -104,7 +104,7 @@ public: class MatcherDescriptor { public: virtual ~MatcherDescriptor() {} - virtual VariantMatcher create(const SourceRange &NameRange, + virtual VariantMatcher create(SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) const = 0; @@ -162,7 +162,7 @@ class FixedArgCountMatcherDescriptor : public MatcherDescriptor { public: typedef VariantMatcher (*MarshallerType)(void (*Func)(), StringRef MatcherName, - const SourceRange &NameRange, + SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error); @@ -180,7 +180,7 @@ public: RetKinds(RetKinds.begin(), RetKinds.end()), ArgKinds(ArgKinds.begin(), ArgKinds.end()) {} - VariantMatcher create(const SourceRange &NameRange, + VariantMatcher create(SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) const override { return Marshaller(Func, MatcherName, NameRange, Args, Error); @@ -279,7 +279,7 @@ struct BuildReturnTypeVector<ast_matchers::internal::BindableMatcher<T> > { template <typename ResultT, typename ArgT, ResultT (*Func)(ArrayRef<const ArgT *>)> VariantMatcher -variadicMatcherDescriptor(StringRef MatcherName, const SourceRange &NameRange, +variadicMatcherDescriptor(StringRef MatcherName, SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) { ArgT **InnerArgs = new ArgT *[Args.size()](); @@ -320,7 +320,7 @@ variadicMatcherDescriptor(StringRef MatcherName, const SourceRange &NameRange, class VariadicFuncMatcherDescriptor : public MatcherDescriptor { public: typedef VariantMatcher (*RunFunc)(StringRef MatcherName, - const SourceRange &NameRange, + SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error); @@ -334,7 +334,7 @@ public: BuildReturnTypeVector<ResultT>::build(RetKinds); } - VariantMatcher create(const SourceRange &NameRange, + VariantMatcher create(SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) const override { return Func(MatcherName, NameRange, Args, Error); @@ -414,7 +414,7 @@ private: /// \brief 0-arg marshaller function. template <typename ReturnType> static VariantMatcher matcherMarshall0(void (*Func)(), StringRef MatcherName, - const SourceRange &NameRange, + SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) { typedef ReturnType (*FuncType)(); @@ -425,7 +425,7 @@ static VariantMatcher matcherMarshall0(void (*Func)(), StringRef MatcherName, /// \brief 1-arg marshaller function. template <typename ReturnType, typename ArgType1> static VariantMatcher matcherMarshall1(void (*Func)(), StringRef MatcherName, - const SourceRange &NameRange, + SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) { typedef ReturnType (*FuncType)(ArgType1); @@ -438,7 +438,7 @@ static VariantMatcher matcherMarshall1(void (*Func)(), StringRef MatcherName, /// \brief 2-arg marshaller function. template <typename ReturnType, typename ArgType1, typename ArgType2> static VariantMatcher matcherMarshall2(void (*Func)(), StringRef MatcherName, - const SourceRange &NameRange, + SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) { typedef ReturnType (*FuncType)(ArgType1, ArgType2); @@ -493,7 +493,7 @@ public: ~OverloadedMatcherDescriptor() override {} - VariantMatcher create(const SourceRange &NameRange, + VariantMatcher create(SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) const override { std::vector<VariantMatcher> Constructed; @@ -567,7 +567,7 @@ public: : MinCount(MinCount), MaxCount(MaxCount), Op(Op), MatcherName(MatcherName) {} - VariantMatcher create(const SourceRange &NameRange, + VariantMatcher create(SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) const override { if (Args.size() < MinCount || MaxCount < Args.size()) { diff --git a/lib/ASTMatchers/Dynamic/Parser.cpp b/lib/ASTMatchers/Dynamic/Parser.cpp index 96a78cd..cf9dab6 100644 --- a/lib/ASTMatchers/Dynamic/Parser.cpp +++ b/lib/ASTMatchers/Dynamic/Parser.cpp @@ -534,7 +534,7 @@ Parser::RegistrySema::lookupMatcherCtor(StringRef MatcherName) { } VariantMatcher Parser::RegistrySema::actOnMatcherExpression( - MatcherCtor Ctor, const SourceRange &NameRange, StringRef BindID, + MatcherCtor Ctor, SourceRange NameRange, StringRef BindID, ArrayRef<ParserValue> Args, Diagnostics *Error) { if (BindID.empty()) { return Registry::constructMatcher(Ctor, NameRange, Args, Error); diff --git a/lib/ASTMatchers/Dynamic/Registry.cpp b/lib/ASTMatchers/Dynamic/Registry.cpp index 72713dd..5b1c552 100644 --- a/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/lib/ASTMatchers/Dynamic/Registry.cpp @@ -15,6 +15,7 @@ #include "clang/ASTMatchers/Dynamic/Registry.h" #include "Marshallers.h" #include "clang/ASTMatchers/ASTMatchers.h" +#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/ManagedStatic.h" @@ -106,15 +107,13 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(atomicType); REGISTER_MATCHER(autoType); REGISTER_MATCHER(binaryOperator); - REGISTER_MATCHER(bindTemporaryExpr); REGISTER_MATCHER(blockPointerType); - REGISTER_MATCHER(boolLiteral); + REGISTER_MATCHER(booleanType); REGISTER_MATCHER(breakStmt); REGISTER_MATCHER(builtinType); REGISTER_MATCHER(callExpr); REGISTER_MATCHER(caseStmt); REGISTER_MATCHER(castExpr); - REGISTER_MATCHER(catchStmt); REGISTER_MATCHER(characterLiteral); REGISTER_MATCHER(classTemplateDecl); REGISTER_MATCHER(classTemplateSpecializationDecl); @@ -123,27 +122,46 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(compoundStmt); REGISTER_MATCHER(conditionalOperator); REGISTER_MATCHER(constantArrayType); - REGISTER_MATCHER(constCastExpr); - REGISTER_MATCHER(constructExpr); - REGISTER_MATCHER(constructorDecl); REGISTER_MATCHER(containsDeclaration); REGISTER_MATCHER(continueStmt); - REGISTER_MATCHER(conversionDecl); REGISTER_MATCHER(cStyleCastExpr); - REGISTER_MATCHER(ctorInitializer); - REGISTER_MATCHER(CUDAKernelCallExpr); + REGISTER_MATCHER(cudaKernelCallExpr); + REGISTER_MATCHER(cxxBindTemporaryExpr); + REGISTER_MATCHER(cxxBoolLiteral); + REGISTER_MATCHER(cxxCatchStmt); + REGISTER_MATCHER(cxxConstCastExpr); + REGISTER_MATCHER(cxxConstructExpr); + REGISTER_MATCHER(cxxConstructorDecl); + REGISTER_MATCHER(cxxConversionDecl); + REGISTER_MATCHER(cxxCtorInitializer); + REGISTER_MATCHER(cxxDefaultArgExpr); + REGISTER_MATCHER(cxxDeleteExpr); + REGISTER_MATCHER(cxxDestructorDecl); + REGISTER_MATCHER(cxxDynamicCastExpr); + REGISTER_MATCHER(cxxForRangeStmt); + REGISTER_MATCHER(cxxFunctionalCastExpr); + REGISTER_MATCHER(cxxMemberCallExpr); + REGISTER_MATCHER(cxxMethodDecl); + REGISTER_MATCHER(cxxNewExpr); + REGISTER_MATCHER(cxxNullPtrLiteralExpr); + REGISTER_MATCHER(cxxOperatorCallExpr); + REGISTER_MATCHER(cxxRecordDecl); + REGISTER_MATCHER(cxxReinterpretCastExpr); + REGISTER_MATCHER(cxxStaticCastExpr); + REGISTER_MATCHER(cxxTemporaryObjectExpr); + REGISTER_MATCHER(cxxThisExpr); + REGISTER_MATCHER(cxxThrowExpr); + REGISTER_MATCHER(cxxTryStmt); + REGISTER_MATCHER(cxxUnresolvedConstructExpr); + REGISTER_MATCHER(decayedType); REGISTER_MATCHER(decl); REGISTER_MATCHER(declaratorDecl); REGISTER_MATCHER(declCountIs); REGISTER_MATCHER(declRefExpr); REGISTER_MATCHER(declStmt); - REGISTER_MATCHER(defaultArgExpr); REGISTER_MATCHER(defaultStmt); - REGISTER_MATCHER(deleteExpr); REGISTER_MATCHER(dependentSizedArrayType); - REGISTER_MATCHER(destructorDecl); REGISTER_MATCHER(doStmt); - REGISTER_MATCHER(dynamicCastExpr); REGISTER_MATCHER(eachOf); REGISTER_MATCHER(elaboratedType); REGISTER_MATCHER(enumConstantDecl); @@ -160,10 +178,8 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(forEachDescendant); REGISTER_MATCHER(forEachSwitchCase); REGISTER_MATCHER(forField); - REGISTER_MATCHER(forRangeStmt); REGISTER_MATCHER(forStmt); REGISTER_MATCHER(friendDecl); - REGISTER_MATCHER(functionalCastExpr); REGISTER_MATCHER(functionDecl); REGISTER_MATCHER(functionTemplateDecl); REGISTER_MATCHER(functionType); @@ -179,12 +195,14 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(hasArgument); REGISTER_MATCHER(hasArgumentOfType); REGISTER_MATCHER(hasAttr); + REGISTER_MATCHER(hasAutomaticStorageDuration); REGISTER_MATCHER(hasBase); REGISTER_MATCHER(hasBody); REGISTER_MATCHER(hasCanonicalType); REGISTER_MATCHER(hasCaseConstant); REGISTER_MATCHER(hasCondition); REGISTER_MATCHER(hasConditionVariableStatement); + REGISTER_MATCHER(hasDecayedType); REGISTER_MATCHER(hasDeclaration); REGISTER_MATCHER(hasDeclContext); REGISTER_MATCHER(hasDeducedType); @@ -222,9 +240,11 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(hasSize); REGISTER_MATCHER(hasSizeExpr); REGISTER_MATCHER(hasSourceExpression); + REGISTER_MATCHER(hasStaticStorageDuration); REGISTER_MATCHER(hasTargetDecl); REGISTER_MATCHER(hasTemplateArgument); REGISTER_MATCHER(hasThen); + REGISTER_MATCHER(hasThreadStorageDuration); REGISTER_MATCHER(hasTrueExpression); REGISTER_MATCHER(hasTypeLoc); REGISTER_MATCHER(hasUnaryOperand); @@ -237,17 +257,27 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(implicitCastExpr); REGISTER_MATCHER(incompleteArrayType); REGISTER_MATCHER(initListExpr); + REGISTER_MATCHER(injectedClassNameType); REGISTER_MATCHER(innerType); REGISTER_MATCHER(integerLiteral); + REGISTER_MATCHER(isAnonymous); REGISTER_MATCHER(isArrow); + REGISTER_MATCHER(isBaseInitializer); REGISTER_MATCHER(isCatchAll); + REGISTER_MATCHER(isClass); REGISTER_MATCHER(isConst); REGISTER_MATCHER(isConstQualified); + REGISTER_MATCHER(isCopyConstructor); + REGISTER_MATCHER(isDefaultConstructor); REGISTER_MATCHER(isDefinition); REGISTER_MATCHER(isDeleted); + REGISTER_MATCHER(isExceptionVariable); + REGISTER_MATCHER(isExplicit); REGISTER_MATCHER(isExplicitTemplateSpecialization); REGISTER_MATCHER(isExpr); REGISTER_MATCHER(isExternC); + REGISTER_MATCHER(isFinal); + REGISTER_MATCHER(isInline); REGISTER_MATCHER(isImplicit); REGISTER_MATCHER(isExpansionInFileMatching); REGISTER_MATCHER(isExpansionInMainFile); @@ -257,13 +287,20 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(isIntegral); REGISTER_MATCHER(isInTemplateInstantiation); REGISTER_MATCHER(isListInitialization); + REGISTER_MATCHER(isMemberInitializer); + REGISTER_MATCHER(isMoveConstructor); + REGISTER_MATCHER(isNoThrow); REGISTER_MATCHER(isOverride); REGISTER_MATCHER(isPrivate); REGISTER_MATCHER(isProtected); REGISTER_MATCHER(isPublic); REGISTER_MATCHER(isPure); + REGISTER_MATCHER(isStruct); REGISTER_MATCHER(isTemplateInstantiation); + REGISTER_MATCHER(isUnion); + REGISTER_MATCHER(isVariadic); REGISTER_MATCHER(isVirtual); + REGISTER_MATCHER(isVolatileQualified); REGISTER_MATCHER(isWritten); REGISTER_MATCHER(labelStmt); REGISTER_MATCHER(lambdaExpr); @@ -272,24 +309,22 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(matchesSelector); REGISTER_MATCHER(materializeTemporaryExpr); REGISTER_MATCHER(member); - REGISTER_MATCHER(memberCallExpr); REGISTER_MATCHER(memberExpr); REGISTER_MATCHER(memberPointerType); - REGISTER_MATCHER(methodDecl); REGISTER_MATCHER(namedDecl); + REGISTER_MATCHER(namespaceAliasDecl); REGISTER_MATCHER(namespaceDecl); REGISTER_MATCHER(namesType); REGISTER_MATCHER(nestedNameSpecifier); REGISTER_MATCHER(nestedNameSpecifierLoc); - REGISTER_MATCHER(newExpr); - REGISTER_MATCHER(nullPtrLiteralExpr); REGISTER_MATCHER(nullStmt); REGISTER_MATCHER(numSelectorArgs); REGISTER_MATCHER(ofClass); + REGISTER_MATCHER(objcInterfaceDecl); REGISTER_MATCHER(objcMessageExpr); + REGISTER_MATCHER(objcObjectPointerType); REGISTER_MATCHER(on); REGISTER_MATCHER(onImplicitObjectArgument); - REGISTER_MATCHER(operatorCallExpr); REGISTER_MATCHER(parameterCountIs); REGISTER_MATCHER(parenType); REGISTER_MATCHER(parmVarDecl); @@ -302,7 +337,6 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(refersToDeclaration); REGISTER_MATCHER(refersToIntegralType); REGISTER_MATCHER(refersToType); - REGISTER_MATCHER(reinterpretCastExpr); REGISTER_MATCHER(returns); REGISTER_MATCHER(returnStmt); REGISTER_MATCHER(rValueReferenceType); @@ -311,23 +345,20 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(specifiesType); REGISTER_MATCHER(specifiesTypeLoc); REGISTER_MATCHER(statementCountIs); - REGISTER_MATCHER(staticCastExpr); REGISTER_MATCHER(staticAssertDecl); REGISTER_MATCHER(stmt); REGISTER_MATCHER(stringLiteral); REGISTER_MATCHER(substNonTypeTemplateParmExpr); + REGISTER_MATCHER(substTemplateTypeParmType); REGISTER_MATCHER(switchCase); REGISTER_MATCHER(switchStmt); REGISTER_MATCHER(templateArgument); REGISTER_MATCHER(templateArgumentCountIs); REGISTER_MATCHER(templateSpecializationType); - REGISTER_MATCHER(temporaryObjectExpr); - REGISTER_MATCHER(thisExpr); + REGISTER_MATCHER(templateTypeParmType); REGISTER_MATCHER(throughUsingDecl); - REGISTER_MATCHER(throwExpr); REGISTER_MATCHER(to); REGISTER_MATCHER(translationUnitDecl); - REGISTER_MATCHER(tryStmt); REGISTER_MATCHER(type); REGISTER_MATCHER(typedefDecl); REGISTER_MATCHER(typedefType); @@ -336,7 +367,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(unaryOperator); REGISTER_MATCHER(unaryTransformType); REGISTER_MATCHER(unless); - REGISTER_MATCHER(unresolvedConstructExpr); + REGISTER_MATCHER(unresolvedUsingTypenameDecl); REGISTER_MATCHER(unresolvedUsingValueDecl); REGISTER_MATCHER(userDefinedLiteral); REGISTER_MATCHER(usingDecl); @@ -350,11 +381,7 @@ RegistryMaps::RegistryMaps() { } RegistryMaps::~RegistryMaps() { - for (ConstructorMap::iterator it = Constructors.begin(), - end = Constructors.end(); - it != end; ++it) { - delete it->second; - } + llvm::DeleteContainerSeconds(Constructors); } static llvm::ManagedStatic<RegistryMaps> RegistryData; @@ -425,12 +452,13 @@ Registry::getMatcherCompletions(ArrayRef<ArgKind> AcceptedTypes) { std::vector<MatcherCompletion> Completions; // Search the registry for acceptable matchers. - for (ConstructorMap::const_iterator I = RegistryData->constructors().begin(), - E = RegistryData->constructors().end(); - I != E; ++I) { + for (const auto &M : RegistryData->constructors()) { + const auto *Matcher = M.getValue(); + StringRef Name = M.getKey(); + std::set<ASTNodeKind> RetKinds; - unsigned NumArgs = I->second->isVariadic() ? 1 : I->second->getNumArgs(); - bool IsPolymorphic = I->second->isPolymorphic(); + unsigned NumArgs = Matcher->isVariadic() ? 1 : Matcher->getNumArgs(); + bool IsPolymorphic = Matcher->isPolymorphic(); std::vector<std::vector<ArgKind>> ArgsKinds(NumArgs); unsigned MaxSpecificity = 0; for (const ArgKind& Kind : AcceptedTypes) { @@ -438,13 +466,13 @@ Registry::getMatcherCompletions(ArrayRef<ArgKind> AcceptedTypes) { continue; unsigned Specificity; ASTNodeKind LeastDerivedKind; - if (I->second->isConvertibleTo(Kind.getMatcherKind(), &Specificity, - &LeastDerivedKind)) { + if (Matcher->isConvertibleTo(Kind.getMatcherKind(), &Specificity, + &LeastDerivedKind)) { if (MaxSpecificity < Specificity) MaxSpecificity = Specificity; RetKinds.insert(LeastDerivedKind); for (unsigned Arg = 0; Arg != NumArgs; ++Arg) - I->second->getArgKinds(Kind.getMatcherKind(), Arg, ArgsKinds[Arg]); + Matcher->getArgKinds(Kind.getMatcherKind(), Arg, ArgsKinds[Arg]); if (IsPolymorphic) break; } @@ -455,9 +483,9 @@ Registry::getMatcherCompletions(ArrayRef<ArgKind> AcceptedTypes) { llvm::raw_string_ostream OS(Decl); if (IsPolymorphic) { - OS << "Matcher<T> " << I->first() << "(Matcher<T>"; + OS << "Matcher<T> " << Name << "(Matcher<T>"; } else { - OS << "Matcher<" << RetKinds << "> " << I->first() << "("; + OS << "Matcher<" << RetKinds << "> " << Name << "("; for (const std::vector<ArgKind> &Arg : ArgsKinds) { if (&Arg != &ArgsKinds[0]) OS << ", "; @@ -480,11 +508,11 @@ Registry::getMatcherCompletions(ArrayRef<ArgKind> AcceptedTypes) { } } } - if (I->second->isVariadic()) + if (Matcher->isVariadic()) OS << "..."; OS << ")"; - std::string TypedText = I->first(); + std::string TypedText = Name; TypedText += "("; if (ArgsKinds.empty()) TypedText += ")"; @@ -500,7 +528,7 @@ Registry::getMatcherCompletions(ArrayRef<ArgKind> AcceptedTypes) { // static VariantMatcher Registry::constructMatcher(MatcherCtor Ctor, - const SourceRange &NameRange, + SourceRange NameRange, ArrayRef<ParserValue> Args, Diagnostics *Error) { return Ctor->create(NameRange, Args, Error); @@ -508,7 +536,7 @@ VariantMatcher Registry::constructMatcher(MatcherCtor Ctor, // static VariantMatcher Registry::constructBoundMatcher(MatcherCtor Ctor, - const SourceRange &NameRange, + SourceRange NameRange, StringRef BindID, ArrayRef<ParserValue> Args, Diagnostics *Error) { diff --git a/lib/ASTMatchers/Dynamic/VariantValue.cpp b/lib/ASTMatchers/Dynamic/VariantValue.cpp index 9d8be47..8f3c70c 100644 --- a/lib/ASTMatchers/Dynamic/VariantValue.cpp +++ b/lib/ASTMatchers/Dynamic/VariantValue.cpp @@ -72,7 +72,7 @@ VariantMatcher::MatcherOps::constructVariadicOperator( return llvm::None; DynMatchers.push_back(*Inner); } - return DynTypedMatcher::constructVariadic(Op, DynMatchers); + return DynTypedMatcher::constructVariadic(Op, NodeKind, DynMatchers); } VariantMatcher::Payload::~Payload() {} |