]> granicus.if.org Git - clang/commitdiff
[analyzer] Enable the self-init checker under command-line option '-analyzer-check...
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 26 Jan 2011 01:26:50 +0000 (01:26 +0000)
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>
Wed, 26 Jan 2011 01:26:50 +0000 (01:26 +0000)
is enabled by the driver for '--analyze'.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124266 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Driver/CC1Options.td
include/clang/Frontend/AnalyzerOptions.h
lib/Driver/Tools.cpp
lib/Frontend/CompilerInvocation.cpp
lib/StaticAnalyzer/Checkers/AnalysisConsumer.cpp
lib/StaticAnalyzer/Checkers/ExprEngine.cpp
test/Analysis/self-init.m

index d36e45d1d19d9bb3009c0d6a23ffe53bee50d414..12800a8e8098f64fd6325978e754f9e25f339145 100644 (file)
@@ -64,6 +64,8 @@ def analysis_WarnObjCUnusedIvars : Flag<"-analyzer-check-objc-unused-ivars">,
   HelpText<"Warn about private ivars that are never used">;
 def analysis_ObjCMemChecker : Flag<"-analyzer-check-objc-mem">,
   HelpText<"Run the [Core] Foundation reference count checker">;
+def analysis_WarnObjCSelfInit : Flag<"-analyzer-check-objc-self-init">,
+  HelpText<"Warn about missing initialization of 'self' in an initializer">;
 def analysis_WarnSizeofPointer : Flag<"-warn-sizeof-pointer">,
   HelpText<"Warn about unintended use of sizeof() on pointer expressions">;
 def analysis_WarnIdempotentOps : Flag<"-analyzer-check-idempotent-operations">,
index 8915cc59e4b50626740de38550b0811dd942ab6c..8704fff687357c616e9fca47fc786a589da5d919 100644 (file)
@@ -68,6 +68,7 @@ public:
   unsigned AnalyzerStats : 1;
   unsigned EagerlyAssume : 1;
   unsigned IdempotentOps : 1;
+  unsigned ObjCSelfInitCheck : 1;
   unsigned BufferOverflows : 1;
   unsigned PurgeDead : 1;
   unsigned TrimGraph : 1;
@@ -91,6 +92,7 @@ public:
     AnalyzerStats = 0;
     EagerlyAssume = 0;
     IdempotentOps = 0;
+    ObjCSelfInitCheck = 0;
     BufferOverflows = 0;    
     PurgeDead = 1;
     TrimGraph = 0;
index e245f78870929726a9d9bbd9fbf35ad7f899304a..90ed5d45ae04239165a9eb8c227bd93fec10e1c0 100644 (file)
@@ -910,6 +910,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
       if (types::isObjC(InputType)) {
         CmdArgs.push_back("-analyzer-check-objc-methodsigs");
         CmdArgs.push_back("-analyzer-check-objc-unused-ivars");
+        CmdArgs.push_back("-analyzer-check-objc-self-init");
         // Do not enable the missing -dealloc check.
         // '-analyzer-check-objc-missing-dealloc',
       }
index c3f3dbd1f934199ebd9c1ea4353a541164b403eb..28cae64bff232cca0362f2a568439b77f50e3aae 100644 (file)
@@ -118,6 +118,8 @@ static void AnalyzerOptsToArgs(const AnalyzerOptions &Opts,
     Res.push_back("-analyzer-experimental-internal-checks");
   if (Opts.IdempotentOps)
     Res.push_back("-analyzer-check-idempotent-operations");
+  if (Opts.ObjCSelfInitCheck)
+    Res.push_back("-analyzer-check-objc-self-init");
   if (Opts.BufferOverflows)
     Res.push_back("-analyzer-check-buffer-overflows");
 }
@@ -868,6 +870,7 @@ static void ParseAnalyzerArgs(AnalyzerOptions &Opts, ArgList &Args,
   Opts.MaxLoop = Args.getLastArgIntValue(OPT_analyzer_max_loop, 4, Diags);
   Opts.InlineCall = Args.hasArg(OPT_analyzer_inline_call);
   Opts.IdempotentOps = Args.hasArg(OPT_analysis_WarnIdempotentOps);
+  Opts.ObjCSelfInitCheck = Args.hasArg(OPT_analysis_WarnObjCSelfInit);
   Opts.BufferOverflows = Args.hasArg(OPT_analysis_WarnBufferOverflows);
 }
 
index ae8732a857ba6e9c613100ffe4c5a67d46d1c21d..9190e2d7507505272717f57ab1050cda5308f086 100644 (file)
@@ -357,6 +357,9 @@ static void ActionExprEngine(AnalysisConsumer &C, AnalysisManager& mgr,
   if (C.Opts.EnableExperimentalChecks)
     RegisterExperimentalChecks(Eng);
 
+  if (C.Opts.ObjCSelfInitCheck && isa<ObjCMethodDecl>(D))
+    registerObjCSelfInitChecker(Eng);
+
   // Enable idempotent operation checking if it was explicitly turned on, or if
   // we are running experimental checks (i.e. everything)
   if (C.Opts.IdempotentOps || C.Opts.EnableExperimentalChecks
index f311bea87787b2bf65873bcbb902f1de28a2f774..8ad094b1d3b897c0bddaaad953ffc417bad17aa2 100644 (file)
@@ -309,7 +309,6 @@ static void RegisterInternalChecks(ExprEngine &Eng) {
   RegisterUndefResultChecker(Eng);
   RegisterStackAddrLeakChecker(Eng);
   RegisterObjCAtSyncChecker(Eng);
-  registerObjCSelfInitChecker(Eng);
 
   // This is not a checker yet.
   RegisterNoReturnFunctionChecker(Eng);
index 0be8285c31a6bccf3c3e827185e56847afa61146..1e16e41d7a9a192aeaaf76de46b80bcf193060b6 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem %s -verify
+// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-check-objc-self-init %s -verify
 
 @class NSZone, NSCoder;
 @protocol NSObject