Thanks. The fix is in https://reviews.llvm.org/rL311040.
On Wed, Aug 16, 2017 at 1:39 PM, Evgenii Stepanov <eugeni.stepa...@gmail.com > wrote: > Hi, > > this change breaks build: > clang-tools-extra/clang-tidy/android/CloexecSocketCheck.cpp:20:30: > error: unused variable 'SOCK_CLOEXEC' > [-Werror,-Wunused-const-variable] > static constexpr const char *SOCK_CLOEXEC = "SOCK_CLOEXEC"; > > Please test with LLVM_ENABLE_WERROR=ON before submitting! > > > On Wed, Aug 16, 2017 at 9:59 AM, Chih-Hung Hsieh via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: chh > > Date: Wed Aug 16 09:59:26 2017 > > New Revision: 311020 > > > > URL: http://llvm.org/viewvc/llvm-project?rev=311020&view=rev > > Log: > > [clang-tidy] Use CloexecCheck as base class. > > > > Summary: > > Simplify registerMatchers and check functions in CloexecCreatCheck, > > CloexecSocketCheck, CloexecFopenCheck, and CloexecOpenCheck. > > > > Differential Revision: https://reviews.llvm.org/D36761 > > > > > > Modified: > > clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.cpp > > clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.h > > clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.cpp > > clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.h > > clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.cpp > > clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.h > > clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.cpp > > clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.h > > clang-tools-extra/trunk/clang-tidy/android/CloexecSocketCheck.cpp > > clang-tools-extra/trunk/clang-tidy/android/CloexecSocketCheck.h > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.cpp > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecCheck.cpp?rev=311020& > r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.cpp > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.cpp Wed Aug > 16 09:59:26 2017 > > @@ -20,10 +20,6 @@ namespace tidy { > > namespace android { > > > > namespace { > > - > > -const char *const FuncDeclBindingStr = "funcDecl"; > > -const char *const FuncBindingStr = "func"; > > - > > // Helper function to form the correct string mode for Type3. > > // Build the replace text. If it's string constant, add <Mode> directly > in the > > // end of the string. Else, add <Mode>. > > @@ -41,6 +37,10 @@ std::string buildFixMsgForStringFlag(con > > } > > } // namespace > > > > +constexpr char CloexecCheck::FuncDeclBindingStr[]; > > + > > +constexpr char CloexecCheck::FuncBindingStr[]; > > + > > void CloexecCheck::registerMatchersImpl( > > MatchFinder *Finder, internal::Matcher<FunctionDecl> Function) { > > // We assume all the checked APIs are C functions. > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.h > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecCheck.h?rev=311020&r1= > 311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.h (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecCheck.h Wed Aug > 16 09:59:26 2017 > > @@ -90,6 +90,12 @@ protected: > > /// Helper function to get the spelling of a particular argument. > > StringRef getSpellingArg(const ast_matchers::MatchFinder::MatchResult > &Result, > > int N) const; > > + > > + /// Binding name of the FuncDecl of a function call. > > + static constexpr char FuncDeclBindingStr[] = "funcDecl"; > > + > > + /// Binding name of the function call expression. > > + static constexpr char FuncBindingStr[] = "func"; > > }; > > > > } // namespace android > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/ > CloexecCreatCheck.cpp > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecCreatCheck.cpp?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.cpp > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.cpp > Wed Aug 16 09:59:26 2017 > > @@ -10,7 +10,6 @@ > > #include "CloexecCreatCheck.h" > > #include "clang/AST/ASTContext.h" > > #include "clang/ASTMatchers/ASTMatchFinder.h" > > -#include "clang/Lex/Lexer.h" > > > > using namespace clang::ast_matchers; > > > > @@ -21,37 +20,22 @@ namespace android { > > void CloexecCreatCheck::registerMatchers(MatchFinder *Finder) { > > auto CharPointerType = hasType(pointerType(pointee( > isAnyCharacter()))); > > auto MODETType = hasType(namedDecl(hasName("mode_t"))); > > - > > - Finder->addMatcher( > > - callExpr(callee(functionDecl(isExternC(), returns(isInteger()), > > - hasName("creat"), > > - hasParameter(0, CharPointerType), > > - hasParameter(1, MODETType)) > > - .bind("funcDecl"))) > > - .bind("creatFn"), > > - this); > > + registerMatchersImpl(Finder, > > + functionDecl(isExternC(), returns(isInteger()), > > + hasName("creat"), > > + hasParameter(0, CharPointerType), > > + hasParameter(1, MODETType))); > > } > > > > void CloexecCreatCheck::check(const MatchFinder::MatchResult &Result) { > > - const auto *MatchedCall = Result.Nodes.getNodeAs< > CallExpr>("creatFn"); > > - const SourceManager &SM = *Result.SourceManager; > > - > > const std::string &ReplacementText = > > - (Twine("open (") + > > - Lexer::getSourceText(CharSourceRange::getTokenRange( > > - MatchedCall->getArg(0)-> > getSourceRange()), > > - SM, Result.Context->getLangOpts()) + > > + (Twine("open (") + getSpellingArg(Result, 0) + > > ", O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, " + > > - Lexer::getSourceText(CharSourceRange::getTokenRange( > > - MatchedCall->getArg(1)-> > getSourceRange()), > > - SM, Result.Context->getLangOpts()) + > > - ")") > > + getSpellingArg(Result, 1) + ")") > > .str(); > > - > > - diag(MatchedCall->getLocStart(), > > - "prefer open() to creat() because open() allows O_CLOEXEC") > > - << FixItHint::CreateReplacement(MatchedCall->getSourceRange(), > > - ReplacementText); > > + replaceFunc(Result, > > + "prefer open() to creat() because open() allows > O_CLOEXEC", > > + ReplacementText); > > } > > > > } // namespace android > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.h > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecCreatCheck.h?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.h > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecCreatCheck.h Wed > Aug 16 09:59:26 2017 > > @@ -10,7 +10,7 @@ > > #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_CREAT_H > > #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_CREAT_H > > > > -#include "../ClangTidy.h" > > +#include "CloexecCheck.h" > > > > namespace clang { > > namespace tidy { > > @@ -20,10 +20,10 @@ namespace android { > > /// Find the usage of creat() and redirect user to use open(). > > > > /// http://clang.llvm.org/extra/clang-tidy/checks/android- > cloexec-creat.html > > -class CloexecCreatCheck : public ClangTidyCheck { > > +class CloexecCreatCheck : public CloexecCheck { > > public: > > CloexecCreatCheck(StringRef Name, ClangTidyContext *Context) > > - : ClangTidyCheck(Name, Context) {} > > + : CloexecCheck(Name, Context) {} > > void registerMatchers(ast_matchers::MatchFinder *Finder) override; > > void check(const ast_matchers::MatchFinder::MatchResult &Result) > override; > > }; > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/ > CloexecFopenCheck.cpp > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecFopenCheck.cpp?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.cpp > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.cpp > Wed Aug 16 09:59:26 2017 > > @@ -18,55 +18,17 @@ namespace clang { > > namespace tidy { > > namespace android { > > > > -namespace { > > -static const char MODE = 'e'; > > - > > -// Build the replace text. If it's string constant, add 'e' directly in > the end > > -// of the string. Else, add "e". > > -std::string BuildReplaceText(const Expr *Arg, const SourceManager &SM, > > - const LangOptions &LangOpts) { > > - if (Arg->getLocStart().isMacroID()) > > - return (Lexer::getSourceText( > > - CharSourceRange::getTokenRange(Arg->getSourceRange()), > SM, > > - LangOpts) + > > - " \"" + Twine(MODE) + "\"") > > - .str(); > > - > > - StringRef SR = cast<StringLiteral>(Arg->IgnoreParenCasts())-> > getString(); > > - return ("\"" + SR + Twine(MODE) + "\"").str(); > > -} > > -} // namespace > > - > > void CloexecFopenCheck::registerMatchers(MatchFinder *Finder) { > > auto CharPointerType = hasType(pointerType(pointee( > isAnyCharacter()))); > > - > > - Finder->addMatcher( > > - callExpr(callee(functionDecl(isExternC(), returns(asString("FILE > *")), > > - hasName("fopen"), > > - hasParameter(0, CharPointerType), > > - hasParameter(1, CharPointerType)) > > - .bind("funcDecl"))) > > - .bind("fopenFn"), > > - this); > > + registerMatchersImpl(Finder, > > + functionDecl(isExternC(), returns(asString("FILE > *")), > > + hasName("fopen"), > > + hasParameter(0, CharPointerType), > > + hasParameter(1, CharPointerType))); > > } > > > > void CloexecFopenCheck::check(const MatchFinder::MatchResult &Result) { > > - const auto *MatchedCall = Result.Nodes.getNodeAs< > CallExpr>("fopenFn"); > > - const auto *FD = Result.Nodes.getNodeAs<FunctionDecl>("funcDecl"); > > - const Expr *ModeArg = MatchedCall->getArg(1); > > - > > - // Check if the 'e' may be in the mode string. > > - const auto *ModeStr = dyn_cast<StringLiteral>( > ModeArg->IgnoreParenCasts()); > > - if (!ModeStr || (ModeStr->getString().find(MODE) != StringRef::npos)) > > - return; > > - > > - const std::string &ReplacementText = BuildReplaceText( > > - ModeArg, *Result.SourceManager, Result.Context->getLangOpts()); > > - > > - diag(ModeArg->getLocStart(), "use %0 mode 'e' to set O_CLOEXEC") > > - << FD > > - << FixItHint::CreateReplacement(ModeArg->getSourceRange(), > > - ReplacementText); > > + insertStringFlag(Result, /*Mode=*/'e', /*ArgPos=*/1); > > } > > > > } // namespace android > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.h > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecFopenCheck.h?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.h > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecFopenCheck.h Wed > Aug 16 09:59:26 2017 > > @@ -10,7 +10,7 @@ > > #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_FOPEN_H > > #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_FOPEN_H > > > > -#include "../ClangTidy.h" > > +#include "CloexecCheck.h" > > > > namespace clang { > > namespace tidy { > > @@ -23,10 +23,10 @@ namespace android { > > /// constant propagation. > > /// > > /// http://clang.llvm.org/extra/clang-tidy/checks/android- > cloexec-fopen.html > > -class CloexecFopenCheck : public ClangTidyCheck { > > +class CloexecFopenCheck : public CloexecCheck { > > public: > > CloexecFopenCheck(StringRef Name, ClangTidyContext *Context) > > - : ClangTidyCheck(Name, Context) {} > > + : CloexecCheck(Name, Context) {} > > void registerMatchers(ast_matchers::MatchFinder *Finder) override; > > void check(const ast_matchers::MatchFinder::MatchResult &Result) > override; > > }; > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck. > cpp > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecOpenCheck.cpp?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.cpp > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.cpp Wed > Aug 16 09:59:26 2017 > > @@ -8,10 +8,8 @@ > > //===------------------------------------------------------- > ---------------===// > > > > #include "CloexecOpenCheck.h" > > -#include "../utils/ASTUtils.h" > > #include "clang/AST/ASTContext.h" > > #include "clang/ASTMatchers/ASTMatchFinder.h" > > -#include "clang/Lex/Lexer.h" > > > > using namespace clang::ast_matchers; > > > > @@ -19,54 +17,26 @@ namespace clang { > > namespace tidy { > > namespace android { > > > > -static constexpr const char *O_CLOEXEC = "O_CLOEXEC"; > > - > > void CloexecOpenCheck::registerMatchers(MatchFinder *Finder) { > > auto CharPointerType = hasType(pointerType(pointee( > isAnyCharacter()))); > > - > > - Finder->addMatcher( > > - callExpr(callee(functionDecl(isExternC(), returns(isInteger()), > > - hasAnyName("open", "open64"), > > - hasParameter(0, CharPointerType), > > - hasParameter(1, > hasType(isInteger()))) > > - .bind("funcDecl"))) > > - .bind("openFn"), > > - this); > > - Finder->addMatcher( > > - callExpr(callee(functionDecl(isExternC(), returns(isInteger()), > > - hasName("openat"), > > - hasParameter(0, > hasType(isInteger())), > > - hasParameter(1, CharPointerType), > > - hasParameter(2, > hasType(isInteger()))) > > - .bind("funcDecl"))) > > - .bind("openatFn"), > > - this); > > + registerMatchersImpl(Finder, > > + functionDecl(isExternC(), returns(isInteger()), > > + hasAnyName("open", "open64"), > > + hasParameter(0, CharPointerType), > > + hasParameter(1, > hasType(isInteger())))); > > + registerMatchersImpl(Finder, > > + functionDecl(isExternC(), returns(isInteger()), > > + hasName("openat"), > > + hasParameter(0, > hasType(isInteger())), > > + hasParameter(1, CharPointerType), > > + hasParameter(2, > hasType(isInteger())))); > > } > > > > void CloexecOpenCheck::check(const MatchFinder::MatchResult &Result) { > > - const Expr *FlagArg = nullptr; > > - if (const auto *OpenFnCall = Result.Nodes.getNodeAs< > CallExpr>("openFn")) > > - FlagArg = OpenFnCall->getArg(1); > > - else if (const auto *OpenFnCall = > > - Result.Nodes.getNodeAs<CallExpr>("openatFn")) > > - FlagArg = OpenFnCall->getArg(2); > > - assert(FlagArg); > > - > > - const auto *FD = Result.Nodes.getNodeAs<FunctionDecl>("funcDecl"); > > - > > - // Check the required flag. > > - SourceManager &SM = *Result.SourceManager; > > - if (utils::exprHasBitFlagWithSpelling(FlagArg->IgnoreParenCasts(), > SM, > > - Result.Context->getLangOpts(), O_CLOEXEC)) > > - return; > > - > > - SourceLocation EndLoc = > > - Lexer::getLocForEndOfToken(SM.getFileLoc(FlagArg->getLocEnd()), > 0, SM, > > - Result.Context->getLangOpts()); > > - > > - diag(EndLoc, "%0 should use %1 where possible") > > - << FD << O_CLOEXEC > > - << FixItHint::CreateInsertion(EndLoc, (Twine(" | ") + > O_CLOEXEC).str()); > > + const auto *FD = Result.Nodes.getNodeAs<FunctionDecl>( > FuncDeclBindingStr); > > + assert(FD->param_size() > 1); > > + int ArgPos = (FD->param_size() > 2) ? 2 : 1; > > + insertMacroFlag(Result, /*MarcoFlag=*/"O_CLOEXEC", ArgPos); > > } > > > > } // namespace android > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.h > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecOpenCheck.h?rev=311020& > r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.h > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecOpenCheck.h Wed > Aug 16 09:59:26 2017 > > @@ -10,7 +10,7 @@ > > #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_OPEN_H > > #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_OPEN_H > > > > -#include "../ClangTidy.h" > > +#include "CloexecCheck.h" > > > > namespace clang { > > namespace tidy { > > @@ -25,10 +25,10 @@ namespace android { > > /// > > /// Only the symbolic 'O_CLOEXEC' macro definition is checked, not the > concrete > > /// value. > > -class CloexecOpenCheck : public ClangTidyCheck { > > +class CloexecOpenCheck : public CloexecCheck { > > public: > > CloexecOpenCheck(StringRef Name, ClangTidyContext *Context) > > - : ClangTidyCheck(Name, Context) {} > > + : CloexecCheck(Name, Context) {} > > void registerMatchers(ast_matchers::MatchFinder *Finder) override; > > void check(const ast_matchers::MatchFinder::MatchResult &Result) > override; > > }; > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/ > CloexecSocketCheck.cpp > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecSocketCheck.cpp?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecSocketCheck.cpp > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecSocketCheck.cpp > Wed Aug 16 09:59:26 2017 > > @@ -8,7 +8,6 @@ > > //===------------------------------------------------------- > ---------------===// > > > > #include "CloexecSocketCheck.h" > > -#include "../utils/ASTUtils.h" > > #include "clang/AST/ASTContext.h" > > #include "clang/ASTMatchers/ASTMatchFinder.h" > > > > @@ -21,35 +20,16 @@ namespace android { > > static constexpr const char *SOCK_CLOEXEC = "SOCK_CLOEXEC"; > > > > void CloexecSocketCheck::registerMatchers(MatchFinder *Finder) { > > - Finder->addMatcher( > > - callExpr(callee(functionDecl(isExternC(), returns(isInteger()), > > - hasName("socket"), > > - hasParameter(0, > hasType(isInteger())), > > - hasParameter(1, > hasType(isInteger())), > > - hasParameter(2, > hasType(isInteger()))) > > - .bind("funcDecl"))) > > - .bind("socketFn"), > > - this); > > + registerMatchersImpl(Finder, > > + functionDecl(isExternC(), returns(isInteger()), > > + hasName("socket"), > > + hasParameter(0, > hasType(isInteger())), > > + hasParameter(1, > hasType(isInteger())), > > + hasParameter(2, > hasType(isInteger())))); > > } > > > > void CloexecSocketCheck::check(const MatchFinder::MatchResult &Result) > { > > - const auto *MatchedCall = Result.Nodes.getNodeAs< > CallExpr>("socketFn"); > > - const auto *FD = Result.Nodes.getNodeAs<FunctionDecl>("funcDecl"); > > - const Expr *FlagArg = MatchedCall->getArg(1); > > - SourceManager &SM = *Result.SourceManager; > > - > > - if (utils::exprHasBitFlagWithSpelling(FlagArg->IgnoreParenCasts(), > SM, > > - Result.Context->getLangOpts(), SOCK_CLOEXEC)) > > - return; > > - > > - SourceLocation EndLoc = > > - Lexer::getLocForEndOfToken(SM.getFileLoc(FlagArg->getLocEnd()), > 0, SM, > > - Result.Context->getLangOpts()); > > - > > - diag(EndLoc, "%0 should use %1 where possible") > > - << FD << SOCK_CLOEXEC > > - << FixItHint::CreateInsertion(EndLoc, > > - (Twine(" | ") + > SOCK_CLOEXEC).str()); > > + insertMacroFlag(Result, /*MarcoFlag=*/"SOCK_CLOEXEC", /*ArgPos=*/1); > > } > > > > } // namespace android > > > > Modified: clang-tools-extra/trunk/clang-tidy/android/ > CloexecSocketCheck.h > > URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/ > trunk/clang-tidy/android/CloexecSocketCheck.h?rev= > 311020&r1=311019&r2=311020&view=diff > > ============================================================ > ================== > > --- clang-tools-extra/trunk/clang-tidy/android/CloexecSocketCheck.h > (original) > > +++ clang-tools-extra/trunk/clang-tidy/android/CloexecSocketCheck.h Wed > Aug 16 09:59:26 2017 > > @@ -10,7 +10,7 @@ > > #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_SOCKET_H > > #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ANDROID_CLOEXEC_SOCKET_H > > > > -#include "../ClangTidy.h" > > +#include "CloexecCheck.h" > > > > namespace clang { > > namespace tidy { > > @@ -20,10 +20,10 @@ namespace android { > > /// > > /// For the user-facing documentation see: > > /// http://clang.llvm.org/extra/clang-tidy/checks/android- > cloexec-socket.html > > -class CloexecSocketCheck : public ClangTidyCheck { > > +class CloexecSocketCheck : public CloexecCheck { > > public: > > CloexecSocketCheck(StringRef Name, ClangTidyContext *Context) > > - : ClangTidyCheck(Name, Context) {} > > + : CloexecCheck(Name, Context) {} > > void registerMatchers(ast_matchers::MatchFinder *Finder) override; > > void check(const ast_matchers::MatchFinder::MatchResult &Result) > override; > > }; > > > > > > _______________________________________________ > > 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