From: Benjamin Kramer Date: Sun, 15 Feb 2015 20:11:07 +0000 (+0000) Subject: Analyzer: Replace a set of particularly ugly faux variadics. X-Git-Tag: llvmorg-3.7.0-rc1~11987 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=07a7ff3bce3201b849260dbff38f3e31225d064c;p=platform%2Fupstream%2Fllvm.git Analyzer: Replace a set of particularly ugly faux variadics. llvm-svn: 229325 --- diff --git a/clang/include/clang/StaticAnalyzer/Core/Checker.h b/clang/include/clang/StaticAnalyzer/Core/Checker.h index 8cc3514..efc3118 100644 --- a/clang/include/clang/StaticAnalyzer/Core/Checker.h +++ b/clang/include/clang/StaticAnalyzer/Core/Checker.h @@ -25,10 +25,6 @@ namespace ento { namespace check { -struct _VoidCheck { - static void _register(void *checker, CheckerManager &mgr) { } -}; - template class ASTDecl { template @@ -476,49 +472,22 @@ public: CheckerProgramPointTag(const CheckerBase *Checker, StringRef Msg); }; -template -class Checker; - -template <> -class Checker - : public CheckerBase -{ - virtual void anchor(); +template +class Checker : public CHECK1, public Checker { public: - static void _register(void *checker, CheckerManager &mgr) { } + template + static void _register(CHECKER *checker, CheckerManager &mgr) { + CHECK1::_register(checker, mgr); + Checker::_register(checker, mgr); + } }; -template -class Checker - : public CHECK1, - public Checker { +template +class Checker : public CHECK1, public CheckerBase { public: template static void _register(CHECKER *checker, CheckerManager &mgr) { CHECK1::_register(checker, mgr); - Checker::_register(checker, mgr); } }; diff --git a/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h b/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h index 30b0480..8a1a82b 100644 --- a/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h +++ b/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -47,71 +47,18 @@ namespace ento { template class CheckerFn; -template -class CheckerFn { - typedef RET (*Func)(void *, P1, P2, P3, P4, P5); +template +class CheckerFn { + typedef RET (*Func)(void *, Ps...); Func Fn; public: CheckerBase *Checker; CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) { } - RET operator()(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) const { - return Fn(Checker, p1, p2, p3, p4, p5); + RET operator()(Ps... ps) const { + return Fn(Checker, ps...); } }; -template -class CheckerFn { - typedef RET (*Func)(void *, P1, P2, P3, P4); - Func Fn; -public: - CheckerBase *Checker; - CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) { } - RET operator()(P1 p1, P2 p2, P3 p3, P4 p4) const { - return Fn(Checker, p1, p2, p3, p4); - } -}; - -template -class CheckerFn { - typedef RET (*Func)(void *, P1, P2, P3); - Func Fn; -public: - CheckerBase *Checker; - CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) { } - RET operator()(P1 p1, P2 p2, P3 p3) const { return Fn(Checker, p1, p2, p3); } -}; - -template -class CheckerFn { - typedef RET (*Func)(void *, P1, P2); - Func Fn; -public: - CheckerBase *Checker; - CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) { } - RET operator()(P1 p1, P2 p2) const { return Fn(Checker, p1, p2); } -}; - -template -class CheckerFn { - typedef RET (*Func)(void *, P1); - Func Fn; -public: - CheckerBase *Checker; - CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) { } - RET operator()(P1 p1) const { return Fn(Checker, p1); } -}; - -template -class CheckerFn { - typedef RET (*Func)(void *); - Func Fn; -public: - CheckerBase *Checker; - CheckerFn(CheckerBase *checker, Func fn) : Fn(fn), Checker(checker) { } - RET operator()() const { return Fn(Checker); } -}; - /// \brief Describes the different reasons a pointer escapes /// during analysis. enum PointerEscapeKind { diff --git a/clang/lib/StaticAnalyzer/Core/Checker.cpp b/clang/lib/StaticAnalyzer/Core/Checker.cpp index 1a3965a..2235211 100644 --- a/clang/lib/StaticAnalyzer/Core/Checker.cpp +++ b/clang/lib/StaticAnalyzer/Core/Checker.cpp @@ -36,11 +36,3 @@ raw_ostream& clang::ento::operator<<(raw_ostream &Out, Out << Checker.getCheckName().getName(); return Out; } - -void Checker::anchor() { }