1 //== CheckerV2.h - Registration mechanism for checkers -----------*- C++ -*--=//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines CheckerV2, used to create and register checkers.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CLANG_SA_CORE_CHECKERV2
15 #define LLVM_CLANG_SA_CORE_CHECKERV2
17 #include "clang/StaticAnalyzer/Core/CheckerManager.h"
18 #include "llvm/Support/Casting.h"
27 static void _register(void *checker
, CheckerManager
&mgr
) { }
30 template <typename DECL
>
32 template <typename CHECKER
>
33 static void _checkDecl(void *checker
, const Decl
*D
, AnalysisManager
& mgr
,
35 ((const CHECKER
*)checker
)->checkASTDecl(llvm::cast
<DECL
>(D
), mgr
, BR
);
38 static bool _handlesDecl(const Decl
*D
) {
39 return llvm::isa
<DECL
>(D
);
42 template <typename CHECKER
>
43 static void _register(CHECKER
*checker
, CheckerManager
&mgr
) {
44 mgr
._registerForDecl(checker
, _checkDecl
<CHECKER
>, _handlesDecl
);
49 template <typename CHECKER
>
50 static void _checkBody(void *checker
, const Decl
*D
, AnalysisManager
& mgr
,
52 ((const CHECKER
*)checker
)->checkASTCodeBody(D
, mgr
, BR
);
56 template <typename CHECKER
>
57 static void _register(CHECKER
*checker
, CheckerManager
&mgr
) {
58 mgr
._registerForBody(checker
, _checkBody
<CHECKER
>);
62 } // end check namespace
64 template <typename CHECK1
, typename CHECK2
=check::_VoidCheck
,
65 typename CHECK3
=check::_VoidCheck
, typename CHECK4
=check::_VoidCheck
,
66 typename CHECK5
=check::_VoidCheck
, typename CHECK6
=check::_VoidCheck
,
67 typename CHECK7
=check::_VoidCheck
, typename CHECK8
=check::_VoidCheck
,
68 typename CHECK9
=check::_VoidCheck
, typename CHECK10
=check::_VoidCheck
,
69 typename CHECK11
=check::_VoidCheck
,typename CHECK12
=check::_VoidCheck
>
72 template <typename CHECKER
>
73 static void _register(CHECKER
*checker
, CheckerManager
&mgr
) {
74 CHECK1::_register(checker
, mgr
);
75 CHECK2::_register(checker
, mgr
);
76 CHECK3::_register(checker
, mgr
);
77 CHECK4::_register(checker
, mgr
);
78 CHECK5::_register(checker
, mgr
);
79 CHECK6::_register(checker
, mgr
);
80 CHECK7::_register(checker
, mgr
);
81 CHECK8::_register(checker
, mgr
);
82 CHECK9::_register(checker
, mgr
);
83 CHECK10::_register(checker
, mgr
);
84 CHECK11::_register(checker
, mgr
);
85 CHECK12::_register(checker
, mgr
);
89 } // end ento namespace
91 } // end clang namespace