BTW, this commit removes the last usage of llvm/ADT/VariadicFunction.h. Should we kill this header?
On Fri, Mar 25, 2016 at 8:51 PM, Mehdi Amini via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Thanks! > > On Mar 25, 2016, at 12:47 PM, Samuel Benzaquen <sbe...@google.com> wrote: > > Fixed in r264453. > Sorry for the inconvenience. > > _Sam > > On Fri, Mar 25, 2016 at 3:31 PM, Samuel Benzaquen <sbe...@google.com> > wrote: > >> Sorry, this is an unrelated problem. >> It is using brace-init lists and the supported MSVC version does not >> support them. >> I'll fix that. >> >> >> On Fri, Mar 25, 2016 at 3:27 PM, Mehdi Amini <mehdi.am...@apple.com> >> wrote: >> >>> The link I provided is testing r264430... >>> >>> -- >>> Mehdi >>> >>> On Mar 25, 2016, at 12:25 PM, Samuel Benzaquen <sbe...@google.com> >>> wrote: >>> >>> I believe r264428 fixes this problem. >>> >>> On Fri, Mar 25, 2016 at 2:18 PM, Mehdi Amini <mehdi.am...@apple.com> >>> wrote: >>> >>>> Hi, >>>> >>>> I think this broke clang-tidy somehow: >>>> http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/10881/steps/build%20stage%201/logs/stdio >>>> >>>> -- >>>> Mehdi >>>> >>>> >>>> >>>> >>>> > On Mar 25, 2016, at 9:29 AM, Samuel Benzaquen via cfe-commits < >>>> cfe-commits@lists.llvm.org> wrote: >>>> > >>>> > Author: sbenza >>>> > Date: Fri Mar 25 11:29:30 2016 >>>> > New Revision: 264417 >>>> > >>>> > URL: http://llvm.org/viewvc/llvm-project?rev=264417&view=rev >>>> > Log: >>>> > [ASTMatchers] Add own version of VariadicFunction. >>>> > >>>> > Summary: >>>> > llvm::VariadicFunction is only being used by ASTMatchers. >>>> > Having our own copy here allows us to remove the other one from >>>> llvm/ADT. >>>> > Also, we can extend the API to meet our needs without modifying the >>>> common >>>> > implementation. >>>> > >>>> > Reviewers: alexfh >>>> > >>>> > Subscribers: klimek, cfe-commits >>>> > >>>> > Differential Revision: http://reviews.llvm.org/D18275 >>>> > >>>> > Modified: >>>> > cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h >>>> > cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h >>>> > cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h >>>> > cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp >>>> > >>>> > Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h >>>> > URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=264417&r1=264416&r2=264417&view=diff >>>> > >>>> ============================================================================== >>>> > --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original) >>>> > +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Fri Mar 25 >>>> 11:29:30 2016 >>>> > @@ -1990,8 +1990,8 @@ inline internal::Matcher<NamedDecl> hasN >>>> > /// \code >>>> > /// anyOf(hasName(a), hasName(b), hasName(c)) >>>> > /// \endcode >>>> > -const llvm::VariadicFunction<internal::Matcher<NamedDecl>, StringRef, >>>> > - internal::hasAnyNameFunc> >>>> > +const internal::VariadicFunction<internal::Matcher<NamedDecl>, >>>> StringRef, >>>> > + internal::hasAnyNameFunc> >>>> > hasAnyName = {}; >>>> > >>>> > /// \brief Matches NamedDecl nodes whose fully qualified names contain >>>> > >>>> > Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h >>>> > URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h?rev=264417&r1=264416&r2=264417&view=diff >>>> > >>>> ============================================================================== >>>> > --- cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h >>>> (original) >>>> > +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h Fri Mar >>>> 25 11:29:30 2016 >>>> > @@ -46,8 +46,9 @@ >>>> > #include "clang/AST/StmtCXX.h" >>>> > #include "clang/AST/StmtObjC.h" >>>> > #include "clang/AST/Type.h" >>>> > +#include "llvm/ADT/ArrayRef.h" >>>> > #include "llvm/ADT/Optional.h" >>>> > -#include "llvm/ADT/VariadicFunction.h" >>>> > +#include "llvm/ADT/SmallVector.h" >>>> > #include "llvm/Support/ManagedStatic.h" >>>> > #include <map> >>>> > #include <string> >>>> > @@ -60,6 +61,39 @@ class BoundNodes; >>>> > >>>> > namespace internal { >>>> > >>>> > +/// \brief Variadic function object. >>>> > +/// >>>> > +/// Most of the functions below that use VariadicFunction could be >>>> implemented >>>> > +/// using plain C++11 variadic functions, but the function object >>>> allows us to >>>> > +/// capture it on the dynamic matcher registry. >>>> > +template <typename ResultT, typename ArgT, >>>> > + ResultT (*Func)(ArrayRef<const ArgT *>)> >>>> > +struct VariadicFunction { >>>> > + ResultT operator()() const { return Func({}); } >>>> > + >>>> > + template <typename... ArgsT> >>>> > + ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const { >>>> > + return Execute(Arg1, static_cast<const ArgT &>(Args)...); >>>> > + } >>>> > + >>>> > + // We also allow calls with an already created array, in case the >>>> caller >>>> > + // already had it. >>>> > + ResultT operator()(ArrayRef<ArgT> Args) const { >>>> > + SmallVector<const ArgT*, 8> InnerArgs; >>>> > + for (const ArgT &Arg : Args) >>>> > + InnerArgs.push_back(&Arg); >>>> > + return Func(InnerArgs); >>>> > + } >>>> > + >>>> > +private: >>>> > + // Trampoline function to allow for implicit conversions to take >>>> place >>>> > + // before we make the array. >>>> > + template <typename... ArgsT> ResultT Execute(const ArgsT &... >>>> Args) const { >>>> > + const ArgT *const ArgsArray[] = {&Args...}; >>>> > + return Func(ArgsArray); >>>> > + } >>>> > +}; >>>> > + >>>> > /// \brief Unifies obtaining the underlying type of a regular node >>>> through >>>> > /// `getType` and a TypedefNameDecl node through `getUnderlyingType`. >>>> > template <typename NodeType> >>>> > @@ -1405,9 +1439,8 @@ inline bool ValueEqualsMatcher<FloatingL >>>> > /// casted to CXXRecordDecl and all given matchers match. >>>> > template <typename SourceT, typename TargetT> >>>> > class VariadicDynCastAllOfMatcher >>>> > - : public llvm::VariadicFunction< >>>> > - BindableMatcher<SourceT>, Matcher<TargetT>, >>>> > - makeDynCastAllOfComposite<SourceT, TargetT> > { >>>> > + : public VariadicFunction<BindableMatcher<SourceT>, >>>> Matcher<TargetT>, >>>> > + makeDynCastAllOfComposite<SourceT, >>>> TargetT>> { >>>> > public: >>>> > VariadicDynCastAllOfMatcher() {} >>>> > }; >>>> > @@ -1423,9 +1456,9 @@ public: >>>> > /// \c Matcher<NestedNameSpecifier>. >>>> > /// The returned matcher matches if all given matchers match. >>>> > template <typename T> >>>> > -class VariadicAllOfMatcher : public llvm::VariadicFunction< >>>> > - BindableMatcher<T>, Matcher<T>, >>>> > - makeAllOfComposite<T> > { >>>> > +class VariadicAllOfMatcher >>>> > + : public VariadicFunction<BindableMatcher<T>, Matcher<T>, >>>> > + makeAllOfComposite<T>> { >>>> > public: >>>> > VariadicAllOfMatcher() {} >>>> > }; >>>> > @@ -1546,8 +1579,8 @@ public: >>>> > new MatcherImpl<OuterT>(InnerMatcher, >>>> Getter<OuterT>::value())); >>>> > } >>>> > >>>> > - struct Func : public llvm::VariadicFunction<Self, >>>> Matcher<InnerTBase>, >>>> > - &Self::create> { >>>> > + struct Func >>>> > + : public VariadicFunction<Self, Matcher<InnerTBase>, >>>> &Self::create> { >>>> > Func() {} >>>> > }; >>>> > >>>> > >>>> > Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h >>>> > URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h?rev=264417&r1=264416&r2=264417&view=diff >>>> > >>>> ============================================================================== >>>> > --- cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h (original) >>>> > +++ cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h Fri Mar 25 >>>> 11:29:30 2016 >>>> > @@ -325,8 +325,9 @@ public: >>>> > >>>> > template <typename ResultT, typename ArgT, >>>> > ResultT (*F)(ArrayRef<const ArgT *>)> >>>> > - VariadicFuncMatcherDescriptor(llvm::VariadicFunction<ResultT, >>>> ArgT, F> Func, >>>> > - StringRef MatcherName) >>>> > + VariadicFuncMatcherDescriptor( >>>> > + ast_matchers::internal::VariadicFunction<ResultT, ArgT, F> >>>> Func, >>>> > + StringRef MatcherName) >>>> > : Func(&variadicMatcherDescriptor<ResultT, ArgT, F>), >>>> > MatcherName(MatcherName.str()), >>>> > ArgsKind(ArgTypeTraits<ArgT>::getKind()) { >>>> > @@ -655,9 +656,9 @@ MatcherDescriptor *makeMatcherAutoMarsha >>>> > /// \brief Variadic overload. >>>> > template <typename ResultT, typename ArgT, >>>> > ResultT (*Func)(ArrayRef<const ArgT *>)> >>>> > -MatcherDescriptor * >>>> > -makeMatcherAutoMarshall(llvm::VariadicFunction<ResultT, ArgT, Func> >>>> VarFunc, >>>> > - StringRef MatcherName) { >>>> > +MatcherDescriptor *makeMatcherAutoMarshall( >>>> > + ast_matchers::internal::VariadicFunction<ResultT, ArgT, Func> >>>> VarFunc, >>>> > + StringRef MatcherName) { >>>> > return new VariadicFuncMatcherDescriptor(VarFunc, MatcherName); >>>> > } >>>> > >>>> > >>>> > Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp >>>> > URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=264417&r1=264416&r2=264417&view=diff >>>> > >>>> ============================================================================== >>>> > --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp (original) >>>> > +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp Fri Mar 25 >>>> 11:29:30 2016 >>>> > @@ -3000,6 +3000,9 @@ TEST(Matcher, HasAnyName) { >>>> > EXPECT_TRUE(notMatches(Code, recordDecl(hasAnyName("::C", >>>> "::b::C")))); >>>> > EXPECT_TRUE( >>>> > matches(Code, recordDecl(hasAnyName("::C", "::b::C", >>>> "::a::b::C")))); >>>> > + >>>> > + std::vector<StringRef> Names = {"::C", "::b::C", "::a::b::C"}; >>>> > + EXPECT_TRUE(matches(Code, recordDecl(hasAnyName(Names)))); >>>> > } >>>> > >>>> > TEST(Matcher, IsDefinition) { >>>> > >>>> > >>>> > _______________________________________________ >>>> > 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 > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits