<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">The link I provided is testing r264430...<div class=""><br class=""></div><div class="">-- </div><div class="">Mehdi</div><div class=""><br class=""><div class=""><div class=""><div><blockquote type="cite" class=""><div class="">On Mar 25, 2016, at 12:25 PM, Samuel Benzaquen <<a href="mailto:sbenza@google.com" class="">sbenza@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I believe r264428 fixes this problem.<br class=""><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Mar 25, 2016 at 2:18 PM, Mehdi Amini <span dir="ltr" class=""><<a href="mailto:mehdi.amini@apple.com" target="_blank" class="cremed">mehdi.amini@apple.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hi,<br class="">
<br class="">
I think this broke clang-tidy somehow: <a href="http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/10881/steps/build%20stage%201/logs/stdio" rel="noreferrer" target="_blank" class="cremed">http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/10881/steps/build%20stage%201/logs/stdio</a><br class="">
<br class="">
--<br class="">
Mehdi<br class="">
<br class="">
<br class="">
<br class="">
<br class="">
> On Mar 25, 2016, at 9:29 AM, Samuel Benzaquen via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="cremed">cfe-commits@lists.llvm.org</a>> wrote:<br class="">
><br class="">
> Author: sbenza<br class="">
> Date: Fri Mar 25 11:29:30 2016<br class="">
> New Revision: 264417<br class="">
><br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=264417&view=rev" rel="noreferrer" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project?rev=264417&view=rev</a><br class="">
> Log:<br class="">
> [ASTMatchers] Add own version of VariadicFunction.<br class="">
><br class="">
> Summary:<br class="">
> llvm::VariadicFunction is only being used by ASTMatchers.<br class="">
> Having our own copy here allows us to remove the other one from llvm/ADT.<br class="">
> Also, we can extend the API to meet our needs without modifying the common<br class="">
> implementation.<br class="">
><br class="">
> Reviewers: alexfh<br class="">
><br class="">
> Subscribers: klimek, cfe-commits<br class="">
><br class="">
> Differential Revision: <a href="http://reviews.llvm.org/D18275" rel="noreferrer" target="_blank" class="cremed">http://reviews.llvm.org/D18275</a><br class="">
><br class="">
> Modified:<br class="">
>    cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h<br class="">
>    cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h<br class="">
>    cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h<br class="">
>    cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp<br class="">
><br class="">
> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=264417&r1=264416&r2=264417&view=diff" rel="noreferrer" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=264417&r1=264416&r2=264417&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)<br class="">
> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Fri Mar 25 11:29:30 2016<br class="">
> @@ -1990,8 +1990,8 @@ inline internal::Matcher<NamedDecl> hasN<br class="">
> /// \code<br class="">
> ///     anyOf(hasName(a), hasName(b), hasName(c))<br class="">
> /// \endcode<br class="">
> -const llvm::VariadicFunction<internal::Matcher<NamedDecl>, StringRef,<br class="">
> -                             internal::hasAnyNameFunc><br class="">
> +const internal::VariadicFunction<internal::Matcher<NamedDecl>, StringRef,<br class="">
> +                                 internal::hasAnyNameFunc><br class="">
>     hasAnyName = {};<br class="">
><br class="">
> /// \brief Matches NamedDecl nodes whose fully qualified names contain<br class="">
><br class="">
> Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h?rev=264417&r1=264416&r2=264417&view=diff" rel="noreferrer" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h?rev=264417&r1=264416&r2=264417&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h (original)<br class="">
> +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchersInternal.h Fri Mar 25 11:29:30 2016<br class="">
> @@ -46,8 +46,9 @@<br class="">
> #include "clang/AST/StmtCXX.h"<br class="">
> #include "clang/AST/StmtObjC.h"<br class="">
> #include "clang/AST/Type.h"<br class="">
> +#include "llvm/ADT/ArrayRef.h"<br class="">
> #include "llvm/ADT/Optional.h"<br class="">
> -#include "llvm/ADT/VariadicFunction.h"<br class="">
> +#include "llvm/ADT/SmallVector.h"<br class="">
> #include "llvm/Support/ManagedStatic.h"<br class="">
> #include <map><br class="">
> #include <string><br class="">
> @@ -60,6 +61,39 @@ class BoundNodes;<br class="">
><br class="">
> namespace internal {<br class="">
><br class="">
> +/// \brief Variadic function object.<br class="">
> +///<br class="">
> +/// Most of the functions below that use VariadicFunction could be implemented<br class="">
> +/// using plain C++11 variadic functions, but the function object allows us to<br class="">
> +/// capture it on the dynamic matcher registry.<br class="">
> +template <typename ResultT, typename ArgT,<br class="">
> +          ResultT (*Func)(ArrayRef<const ArgT *>)><br class="">
> +struct VariadicFunction {<br class="">
> +  ResultT operator()() const { return Func({}); }<br class="">
> +<br class="">
> +  template <typename... ArgsT><br class="">
> +  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {<br class="">
> +    return Execute(Arg1, static_cast<const ArgT &>(Args)...);<br class="">
> +  }<br class="">
> +<br class="">
> +  // We also allow calls with an already created array, in case the caller<br class="">
> +  // already had it.<br class="">
> +  ResultT operator()(ArrayRef<ArgT> Args) const {<br class="">
> +    SmallVector<const ArgT*, 8> InnerArgs;<br class="">
> +    for (const ArgT &Arg : Args)<br class="">
> +      InnerArgs.push_back(&Arg);<br class="">
> +    return Func(InnerArgs);<br class="">
> +  }<br class="">
> +<br class="">
> +private:<br class="">
> +  // Trampoline function to allow for implicit conversions to take place<br class="">
> +  // before we make the array.<br class="">
> +  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {<br class="">
> +    const ArgT *const ArgsArray[] = {&Args...};<br class="">
> +    return Func(ArgsArray);<br class="">
> +  }<br class="">
> +};<br class="">
> +<br class="">
> /// \brief Unifies obtaining the underlying type of a regular node through<br class="">
> /// `getType` and a TypedefNameDecl node through `getUnderlyingType`.<br class="">
> template <typename NodeType><br class="">
> @@ -1405,9 +1439,8 @@ inline bool ValueEqualsMatcher<FloatingL<br class="">
> /// casted to CXXRecordDecl and all given matchers match.<br class="">
> template <typename SourceT, typename TargetT><br class="">
> class VariadicDynCastAllOfMatcher<br class="">
> -    : public llvm::VariadicFunction<<br class="">
> -        BindableMatcher<SourceT>, Matcher<TargetT>,<br class="">
> -        makeDynCastAllOfComposite<SourceT, TargetT> > {<br class="">
> +    : public VariadicFunction<BindableMatcher<SourceT>, Matcher<TargetT>,<br class="">
> +                              makeDynCastAllOfComposite<SourceT, TargetT>> {<br class="">
> public:<br class="">
>   VariadicDynCastAllOfMatcher() {}<br class="">
> };<br class="">
> @@ -1423,9 +1456,9 @@ public:<br class="">
> /// \c Matcher<NestedNameSpecifier>.<br class="">
> /// The returned matcher matches if all given matchers match.<br class="">
> template <typename T><br class="">
> -class VariadicAllOfMatcher : public llvm::VariadicFunction<<br class="">
> -                               BindableMatcher<T>, Matcher<T>,<br class="">
> -                               makeAllOfComposite<T> > {<br class="">
> +class VariadicAllOfMatcher<br class="">
> +    : public VariadicFunction<BindableMatcher<T>, Matcher<T>,<br class="">
> +                              makeAllOfComposite<T>> {<br class="">
> public:<br class="">
>   VariadicAllOfMatcher() {}<br class="">
> };<br class="">
> @@ -1546,8 +1579,8 @@ public:<br class="">
>         new MatcherImpl<OuterT>(InnerMatcher, Getter<OuterT>::value()));<br class="">
>   }<br class="">
><br class="">
> -  struct Func : public llvm::VariadicFunction<Self, Matcher<InnerTBase>,<br class="">
> -                                              &Self::create> {<br class="">
> +  struct Func<br class="">
> +      : public VariadicFunction<Self, Matcher<InnerTBase>, &Self::create> {<br class="">
>     Func() {}<br class="">
>   };<br class="">
><br class="">
><br class="">
> Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h?rev=264417&r1=264416&r2=264417&view=diff" rel="noreferrer" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h?rev=264417&r1=264416&r2=264417&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h (original)<br class="">
> +++ cfe/trunk/lib/ASTMatchers/Dynamic/Marshallers.h Fri Mar 25 11:29:30 2016<br class="">
> @@ -325,8 +325,9 @@ public:<br class="">
><br class="">
>   template <typename ResultT, typename ArgT,<br class="">
>             ResultT (*F)(ArrayRef<const ArgT *>)><br class="">
> -  VariadicFuncMatcherDescriptor(llvm::VariadicFunction<ResultT, ArgT, F> Func,<br class="">
> -                          StringRef MatcherName)<br class="">
> +  VariadicFuncMatcherDescriptor(<br class="">
> +      ast_matchers::internal::VariadicFunction<ResultT, ArgT, F> Func,<br class="">
> +      StringRef MatcherName)<br class="">
>       : Func(&variadicMatcherDescriptor<ResultT, ArgT, F>),<br class="">
>         MatcherName(MatcherName.str()),<br class="">
>         ArgsKind(ArgTypeTraits<ArgT>::getKind()) {<br class="">
> @@ -655,9 +656,9 @@ MatcherDescriptor *makeMatcherAutoMarsha<br class="">
> /// \brief Variadic overload.<br class="">
> template <typename ResultT, typename ArgT,<br class="">
>           ResultT (*Func)(ArrayRef<const ArgT *>)><br class="">
> -MatcherDescriptor *<br class="">
> -makeMatcherAutoMarshall(llvm::VariadicFunction<ResultT, ArgT, Func> VarFunc,<br class="">
> -                        StringRef MatcherName) {<br class="">
> +MatcherDescriptor *makeMatcherAutoMarshall(<br class="">
> +    ast_matchers::internal::VariadicFunction<ResultT, ArgT, Func> VarFunc,<br class="">
> +    StringRef MatcherName) {<br class="">
>   return new VariadicFuncMatcherDescriptor(VarFunc, MatcherName);<br class="">
> }<br class="">
><br class="">
><br class="">
> Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp<br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=264417&r1=264416&r2=264417&view=diff" rel="noreferrer" target="_blank" class="cremed">http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=264417&r1=264416&r2=264417&view=diff</a><br class="">
> ==============================================================================<br class="">
> --- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp (original)<br class="">
> +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp Fri Mar 25 11:29:30 2016<br class="">
> @@ -3000,6 +3000,9 @@ TEST(Matcher, HasAnyName) {<br class="">
>   EXPECT_TRUE(notMatches(Code, recordDecl(hasAnyName("::C", "::b::C"))));<br class="">
>   EXPECT_TRUE(<br class="">
>       matches(Code, recordDecl(hasAnyName("::C", "::b::C", "::a::b::C"))));<br class="">
> +<br class="">
> +  std::vector<StringRef> Names = {"::C", "::b::C", "::a::b::C"};<br class="">
> +  EXPECT_TRUE(matches(Code, recordDecl(hasAnyName(Names))));<br class="">
> }<br class="">
><br class="">
> TEST(Matcher, IsDefinition) {<br class="">
><br class="">
><br class="">
> _______________________________________________<br class="">
> cfe-commits mailing list<br class="">
> <a href="mailto:cfe-commits@lists.llvm.org" class="cremed">cfe-commits@lists.llvm.org</a><br class="">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="cremed">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="">
<br class="">
</blockquote></div><br class=""></div></div>
</div></blockquote></div><br class=""></div></div></div></body></html>