aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-11-13 18:46:29 +0000
committerTed Kremenek <kremenek@apple.com>2009-11-13 18:46:29 +0000
commit8382cf57b722f130f1a6b45380639871c07271c1 (patch)
treec4ca46c9d83c2985986e7149ae1d731e68f1e0f1 /lib
parent79b680ea869983d62b84a9175eeb6b6efb376326 (diff)
Add clang-cc option "--analyzer-experimental-internal-checks". This
option enables new "internal" checks that will eventually be turned on by default but still require broader testing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88671 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/GRExprEngineExperimentalChecks.cpp16
-rw-r--r--lib/Analysis/GRExprEngineInternalChecks.cpp7
-rw-r--r--lib/Frontend/AnalysisConsumer.cpp4
3 files changed, 19 insertions, 8 deletions
diff --git a/lib/Analysis/GRExprEngineExperimentalChecks.cpp b/lib/Analysis/GRExprEngineExperimentalChecks.cpp
index 75f97898ff..2fb7e9fa48 100644
--- a/lib/Analysis/GRExprEngineExperimentalChecks.cpp
+++ b/lib/Analysis/GRExprEngineExperimentalChecks.cpp
@@ -12,13 +12,27 @@
//
//===----------------------------------------------------------------------===//
+#include "GRExprEngineInternalChecks.h"
#include "GRExprEngineExperimentalChecks.h"
#include "clang/Analysis/LocalCheckers.h"
using namespace clang;
-void clang::RegisterExperimentalChecks(GRExprEngine &Eng) {
+void clang::RegisterExperimentalChecks(GRExprEngine &Eng) {
+ // These are checks that never belong as internal checks
+ // within GRExprEngine.
RegisterPthreadLockChecker(Eng);
RegisterMallocChecker(Eng);
}
+void clang::RegisterExperimentalInternalChecks(GRExprEngine &Eng) {
+ // These are internal checks that should eventually migrate to
+ // RegisterInternalChecks() once they have been further tested.
+
+ // Note that this must be registered after ReturnStackAddresEngsChecker.
+ RegisterReturnPointerRangeChecker(Eng);
+ RegisterPointerSubChecker(Eng);
+ RegisterPointerArithChecker(Eng);
+ RegisterCastToStructChecker(Eng);
+ RegisterArrayBoundChecker(Eng);
+}
diff --git a/lib/Analysis/GRExprEngineInternalChecks.cpp b/lib/Analysis/GRExprEngineInternalChecks.cpp
index dc01b96d92..d0f60fde5b 100644
--- a/lib/Analysis/GRExprEngineInternalChecks.cpp
+++ b/lib/Analysis/GRExprEngineInternalChecks.cpp
@@ -395,13 +395,6 @@ void GRExprEngine::RegisterInternalChecks() {
RegisterDivZeroChecker(*this);
RegisterReturnStackAddressChecker(*this);
RegisterReturnUndefChecker(*this);
- RegisterPointerSubChecker(*this);
- RegisterPointerArithChecker(*this);
RegisterFixedAddressChecker(*this);
- // Note that this must be registered after ReturnStackAddressChecker.
- RegisterReturnPointerRangeChecker(*this);
-
- RegisterCastToStructChecker(*this);
- RegisterArrayBoundChecker(*this);
RegisterUndefinedArraySubscriptChecker(*this);
}
diff --git a/lib/Frontend/AnalysisConsumer.cpp b/lib/Frontend/AnalysisConsumer.cpp
index e8bd920d41..b0799af3bf 100644
--- a/lib/Frontend/AnalysisConsumer.cpp
+++ b/lib/Frontend/AnalysisConsumer.cpp
@@ -331,6 +331,10 @@ static void ActionGRExprEngine(AnalysisConsumer &C, AnalysisManager& mgr, Decl *
Eng.setTransferFunctions(tf);
Eng.RegisterInternalChecks(); // FIXME: Internal checks should just
// automatically register.
+
+ if (C.Opts.EnableExperimentalInternalChecks)
+ RegisterExperimentalInternalChecks(Eng);
+
RegisterAppleChecks(Eng, *D);
if (C.Opts.EnableExperimentalChecks)