Commit Graph

271 Commits

Author SHA1 Message Date
Ted Kremenek 98a24e37c5 Begin reworking static analyzer support for C++ method calls. The current logic was divorced
from how we process ordinary function calls, had a tremendous about of redundancy, and relied
strictly on inlining behavior (which was incomplete) to provide semantics instead of falling
back to the conservative analysis we use for C functions.  This is a significant step into
making C++ analyzer support more useful.

llvm-svn: 128557
2011-03-30 17:41:19 +00:00
Argyrios Kyrtzidis 84d7907797 [analyzer] Allow all checkers of a group to be enabled.
llvm-svn: 128512
2011-03-29 23:57:41 +00:00
Argyrios Kyrtzidis 437758cbe6 [analyzer] For -analyzer-checker-help show all the info about groups, packages, and which packages/checkers are hidden.
llvm-svn: 128511
2011-03-29 23:57:38 +00:00
Argyrios Kyrtzidis 4ee039647a [analyzer] Checker Packages can now belong to a group. This requires llvm commit r128474.
llvm-svn: 128475
2011-03-29 18:54:02 +00:00
Anders Carlsson 642b03413f Don't add a symbolic region for 'this' if the member function is static.
llvm-svn: 128340
2011-03-26 14:30:44 +00:00
Ted Kremenek 104f6dfd1f Tweak grammar in checker description.
llvm-svn: 128310
2011-03-26 00:25:42 +00:00
Ted Kremenek 49c79790de Rework checker "packages" and groups to be more hierarchical.
llvm-svn: 128187
2011-03-24 00:28:47 +00:00
Ted Kremenek ddc06d0bd0 Rename class 'CFGReachabilityAnalysis' to 'CFGReverseBlockReachabilityAnalysis'.
This rename serves two purposes:

- It reflects the actual functionality of this analysis.
- We will have more than one reachability analysis.

llvm-svn: 127930
2011-03-19 01:00:33 +00:00
Ted Kremenek 70727343cf Teach VariadicMethodTypeChecker about pointers attributed as 'NSObject'.
llvm-svn: 127798
2011-03-17 04:10:25 +00:00
Ted Kremenek 6fa1daede5 Teach VariadicMethodTypeChecker that CF references are valid arguments to variadic Objective-C methods.
llvm-svn: 127797
2011-03-17 04:01:35 +00:00
Ted Kremenek 3e5ad5932e Tweak RegionStore's handling of lazy compound values to use the 'Default' versus 'Direct' binding key, thus allowing specific elements of an array/struct to be overwritten without
invalidating the entire binding.  Fixes PR 9455.

llvm-svn: 127796
2011-03-17 03:51:51 +00:00
Ted Kremenek 4ceebbf54d VariadicMethodTypeChecker: don't warn for null pointer constants passed to variadic Objective-C methods.
llvm-svn: 127719
2011-03-16 00:22:51 +00:00
Ted Kremenek cdb2ae587a Remove bogus assertion in IdempotentOperationsChecker.
llvm-svn: 127687
2011-03-15 19:27:57 +00:00
Joerg Sonnenberger 161f9a3829 Sort
llvm-svn: 127624
2011-03-14 21:20:46 +00:00
Ted Kremenek 066b226daa Tweak VariadicMethodTypeChecker to only create one ExplodedNode when issuing multiple warnings for the same message expression.
Also add a test case showing that we correctly report multiple warnings for the same message expression.

llvm-svn: 127605
2011-03-14 19:50:37 +00:00
Anders Carlsson d91d5f162f Add an Objective-C checker that checks that arguments passed to some variadic Objective-C methods are of Objective-C pointer types.
Ted or Argiris, I'd appreciate a review!

llvm-svn: 127572
2011-03-13 20:35:21 +00:00
Ted Kremenek a4a57c10da Re-enable the IdempotentOperations checker for --analyze, and put it and the DeadStores checker into the "deadcode" group.
llvm-svn: 127531
2011-03-12 06:14:28 +00:00
Ted Kremenek e5a89ac52a Don't have side-effects (or rather non-trivial computation) in StringSwitch "cases."
llvm-svn: 127528
2011-03-12 04:08:07 +00:00
Ted Kremenek f89710b936 Add initial version of "IteratorsChecker", a checker to find misues uses of C++ iterators.
This checker was created by Jim Goodnow II, and I migrated it to the
new Checker interface (recent changes by Argiris).

llvm-svn: 127525
2011-03-12 02:49:15 +00:00
Ted Kremenek 52d264cda5 Fix comments, and force auto progagation in VisitAggExpr.
llvm-svn: 127524
2011-03-12 02:49:11 +00:00
Ted Kremenek 97474f7414 static analyzer: Handle 'ExprWithCleanups' in ExprEngine by essentially ignoring them.
llvm-svn: 127523
2011-03-12 02:49:09 +00:00
Peter Collingbourne e190dee7a5 Add support for the OpenCL vec_step operator, by generalising and
extending the existing support for sizeof and alignof.  Original
patch by Guy Benyei.

llvm-svn: 127475
2011-03-11 19:24:49 +00:00
Ted Kremenek 2f1f023283 #include Store.h into BasicValueFactory.cpp to provide definitions of StoreRef constructor.
llvm-svn: 127291
2011-03-08 23:39:37 +00:00
Ted Kremenek 4bb6c6b37e static analyzer: Fix use-after-free bug in RegionStore involving LazyCompoundValueData not reference counting Store objects.
llvm-svn: 127288
2011-03-08 23:18:00 +00:00
Anders Carlsson 3c50aea73f Make the Objective-C checker look for subclasses of NSString instead of just NSString and NSMutableString.
llvm-svn: 127268
2011-03-08 20:05:26 +00:00
John McCall b4526252db Move some of the logic about classifying Objective-C methods into
conventional categories into Basic and AST.  Update the self-init checker
to use this logic;  CFRefCountChecker is complicated enough that I didn't
want to touch it.

llvm-svn: 126817
2011-03-02 01:50:55 +00:00
Ted Kremenek eff9a7ff91 Teach CFGBuilder to prune trivially unreachable case statements.
llvm-svn: 126797
2011-03-01 23:12:55 +00:00
Ted Kremenek 96a7a59119 In preparation for fixing PR 6884, rework CFGElement to have getAs<> return pointers instead of fresh CFGElements.
- Also, consoldiate getDtorKind() and getKind() into one "kind".
- Add empty getDestructorDecl() method to CFGImplicitDtor.

llvm-svn: 126738
2011-03-01 03:15:10 +00:00
Argyrios Kyrtzidis a9a0f5d206 [analyzer] Also make sure that the parameter is coming from the current stack frame.
llvm-svn: 126735
2011-03-01 01:59:41 +00:00
Argyrios Kyrtzidis 456b18c279 [analyzer] Remove SVal::getAsVarDecl() and reason about MemRegions, not Decls. Suggestion by Ted!
llvm-svn: 126734
2011-03-01 01:47:48 +00:00
Argyrios Kyrtzidis 918c847890 [analyzer] Move lib/StaticAnalyzer/Checkers/ExprEngine.cpp -> lib/StaticAnalyzer/Core
and hope the wrath of the buildbots will not descend upon me.

llvm-svn: 126728
2011-03-01 01:24:23 +00:00
Argyrios Kyrtzidis 6a5674ffa6 [analyzer] Rename CheckerV2 -> Checker.
llvm-svn: 126726
2011-03-01 01:16:21 +00:00
Argyrios Kyrtzidis 0036b19abd [analyzer] Remove Checker V1.
llvm-svn: 126725
2011-03-01 01:16:08 +00:00
Argyrios Kyrtzidis d665807901 [analyzer] Remove checker V1 registration and running from ExprEngine.
llvm-svn: 126724
2011-03-01 01:16:03 +00:00
Zhanyong Wan 5ad574c096 Improves the coding style in SValBuilder. This patch:
- renames evalCastNL and evalCastL to evalCastFromNonLoc and
  evalCastFromLoc (avoid abbreviations that aren't well known).

- makes all function parameter names start with a lower case letter
  for consistency and distinction from member variables.

- avoids abbreviations in function parameter names.

Reviewed by kremenek@apple.com.

llvm-svn: 126722
2011-03-01 00:45:32 +00:00
Argyrios Kyrtzidis 29b8656935 [analyzer] Remove unused checker stuff from AnalysisConsumer and some unused headers.
llvm-svn: 126690
2011-02-28 22:30:38 +00:00
Argyrios Kyrtzidis 9eb02dfa89 [analyzer] Remove '-analyzer-check-objc-mem' flag, the nominee for best misnomer award.
llvm-svn: 126676
2011-02-28 19:49:42 +00:00
Argyrios Kyrtzidis 6a1c760760 [analyzer] Run the ExprEngine depending on the CheckerManager having path-sensitive checkers.
llvm-svn: 126674
2011-02-28 19:49:17 +00:00
Argyrios Kyrtzidis 20f5caa518 [analyzer] The current UninitializedValuesChecker will go away, remove '-warn-uninit-values'.
llvm-svn: 126673
2011-02-28 19:49:12 +00:00
Argyrios Kyrtzidis 2c49ec7f1d [analyzer] Migrate NSErrorChecker and DereferenceChecker to CheckerV2.
They cooperate in that NSErrorChecker listens for ImplicitNullDerefEvent events that
DereferenceChecker can dispatch.
ImplicitNullDerefEvent is when we dereferenced a location that may be null.

llvm-svn: 126659
2011-02-28 17:36:18 +00:00
Argyrios Kyrtzidis a15dfec3f5 [analyzer] Introduce "event" mechanism in CheckerManager.
A checker can register as receiver/listener of "events" (basically it registers a callback
with a function getting called with an argument of the event type) and other checkers can
register as "dispatchers" and can pass an event object to all the listeners.
This allows cooperation amongst checkers but with very loose coupling.

llvm-svn: 126658
2011-02-28 17:36:09 +00:00
Argyrios Kyrtzidis 98b570ecad [analyzer] Run AST checkers for ObjCMethodDecls.
llvm-svn: 126657
2011-02-28 17:36:04 +00:00
Anders Carlsson 64965ad75d Fix CMake build.
llvm-svn: 126629
2011-02-28 02:13:22 +00:00
Argyrios Kyrtzidis 4b45f6628e [analyzer] Introduce SVal::getAsVarDecl().
llvm-svn: 126627
2011-02-28 01:28:18 +00:00
Argyrios Kyrtzidis 6d6801c5c7 [analzyer] Migrate CallAndMessageChecker to CheckerV2.
llvm-svn: 126626
2011-02-28 01:28:13 +00:00
Argyrios Kyrtzidis 64fe456a6b [analyzer] ExprEngine should not depend on checkers for not crashing.
llvm-svn: 126625
2011-02-28 01:28:08 +00:00
Argyrios Kyrtzidis 0a5a41d799 [analyzer] Migrate AdjustedReturnValueChecker to CheckerV2.
llvm-svn: 126624
2011-02-28 01:28:05 +00:00
Argyrios Kyrtzidis 6fff2e3d36 [analyzer] Migrate AttrNonNullChecker to CheckerV2.
llvm-svn: 126623
2011-02-28 01:28:01 +00:00
Argyrios Kyrtzidis 4f7745a3b1 [analyzer] ExprEngine should not depend on checkers for not crashing.
llvm-svn: 126622
2011-02-28 01:27:57 +00:00
Argyrios Kyrtzidis 68ed625bd3 [analyzer] Migrate VLASizeChecker to CheckerV2.
llvm-svn: 126621
2011-02-28 01:27:54 +00:00
Argyrios Kyrtzidis ae468f77fa [analyzer] Migrate DivZeroChecker to CheckerV2.
llvm-svn: 126620
2011-02-28 01:27:50 +00:00
Argyrios Kyrtzidis 4dc7fb37cb [analyzer] Migrate ReturnUndefChecker to CheckerV2.
llvm-svn: 126619
2011-02-28 01:27:46 +00:00
Argyrios Kyrtzidis da6c7568e2 [analyzer] Migrate UndefinedArraySubscriptChecker to CheckerV2.
llvm-svn: 126618
2011-02-28 01:27:41 +00:00
Argyrios Kyrtzidis 098874a2f8 [analyzer] Migrate UndefinedAssignmentChecker to CheckerV2.
llvm-svn: 126617
2011-02-28 01:27:37 +00:00
Argyrios Kyrtzidis 753b3ca32f [analyzer] Migrate UndefBranchChecker to CheckerV2.
llvm-svn: 126616
2011-02-28 01:27:33 +00:00
Argyrios Kyrtzidis 60b6da721f [analyzer] Migrate UndefCapturedBlockVarChecker to CheckerV2.
llvm-svn: 126615
2011-02-28 01:27:26 +00:00
Argyrios Kyrtzidis d4d3cee6e4 [analyzer] Migrate UndefResultChecker to CheckerV2.
llvm-svn: 126614
2011-02-28 01:27:22 +00:00
Argyrios Kyrtzidis 142dbbfcd8 [analyzer] Migrate NoReturnFunctionChecker to CheckerV2.
llvm-svn: 126613
2011-02-28 01:27:17 +00:00
Argyrios Kyrtzidis 3e7ab19863 [analyzer] Move the DeadStores checker out of the 'core' package.
-Now it gets enabled with '-analyzer-checker=DeadStores'.
-The driver passes the above flag by default.

llvm-svn: 126612
2011-02-28 01:27:12 +00:00
Argyrios Kyrtzidis f3ed8b631d [analyzer] Migrate BuiltinFunctionChecker to CheckerV2.
llvm-svn: 126611
2011-02-28 01:27:07 +00:00
Argyrios Kyrtzidis b2cf708395 [analyzer] Migrate OSAtomicChecker to CheckerV2.
llvm-svn: 126610
2011-02-28 01:27:02 +00:00
Argyrios Kyrtzidis 0a9ce3ec8f [analyzer] Migrate ArrayBoundCheckerV2 to CheckerV2.
Turns -analyzer-check-buffer-overflows into -analyzer-checker=core.experimental.Overflow

llvm-svn: 126609
2011-02-28 01:26:57 +00:00
Argyrios Kyrtzidis 560bbb1241 [analyzer] Turn -analyzer-stats into -analyzer-checker=debug.Stats
llvm-svn: 126608
2011-02-28 01:26:50 +00:00
Argyrios Kyrtzidis 21c9423ef4 [analyzer] Remove '-analyzer-experimental-checks' flag.
llvm-svn: 126607
2011-02-28 01:26:43 +00:00
Argyrios Kyrtzidis 183f0fb4cf [analyzer] Migrate MallocChecker to CheckerV2.
llvm-svn: 126606
2011-02-28 01:26:35 +00:00
Ted Kremenek e925322f41 Update test cases.
llvm-svn: 126523
2011-02-25 22:19:14 +00:00
Ted Kremenek 5eb4b60734 Tidy up help text in Checkers.td, and rename StackAddrLeakChecker to StackAddrEscapeChecker.
llvm-svn: 126522
2011-02-25 22:00:43 +00:00
Argyrios Kyrtzidis 17bee3e70a Intoduce '-analyzer-checker-help' flag which outputs a list of all available static analyzer checkers.
This is pretty basic for now, eventually checkers should be grouped according to package, hidden checkers should be indicated etc.

llvm-svn: 126454
2011-02-25 00:09:51 +00:00
Argyrios Kyrtzidis b388f77ad9 [analyzer] Remove '-analyzer-experimental-internal-checks' flag, it doesn't have any checkers associated with it anymore.
llvm-svn: 126440
2011-02-24 21:43:08 +00:00
Argyrios Kyrtzidis 51695bbb0a [analyzer] Allow a checker to be hidden even if its package is hidden & enabled.
For example, if 'core.experimental.UnreachableCode' is hidden, it should not be enabled with 'core.experimental'.
Note that this requires llvm commit r126436.

llvm-svn: 126439
2011-02-24 21:42:52 +00:00
Argyrios Kyrtzidis 8b08906411 [analyzer] Migrate CastSizeChecker to CheckerV2.
llvm-svn: 126438
2011-02-24 21:42:49 +00:00
Argyrios Kyrtzidis dd407f423b [analyzer] Migrate ArrayBoundChecker to CheckerV2.
llvm-svn: 126371
2011-02-24 08:42:12 +00:00
Argyrios Kyrtzidis 8f38c3843d [analyzer] Don't pass a GRState to CheckerManager::runCheckersForLocation, terrible mistake.
If the state is new, make sure an ExplodedNode is associated with it.

llvm-svn: 126370
2011-02-24 08:42:04 +00:00
Argyrios Kyrtzidis 7bc0141043 [analyzer] Migrate ReturnPointerRangeChecker to CheckerV2.
llvm-svn: 126369
2011-02-24 08:41:57 +00:00
Ted Kremenek d813801384 Fix tiny error in CFG construction for BinaryConditionalOperators, making sure the branch always has two successors. Also teach Environment::getSVal() about OpaqueValueExprs.
This fixes a crash reported in PR9287, and also fixes a false positive involving the value of such ternary
expressions not properly getting propagated.

llvm-svn: 126362
2011-02-24 03:09:15 +00:00
Argyrios Kyrtzidis 4769e9376e [analyzer] Remove unused functions from CheckerManager.
llvm-svn: 126352
2011-02-24 01:05:37 +00:00
Argyrios Kyrtzidis 785459a2a9 [analyzer] Migrate StreamChecker to CheckerV2.
llvm-svn: 126351
2011-02-24 01:05:33 +00:00
Argyrios Kyrtzidis c26f15dbad [analyzer] Migrate CStringChecker to CheckerV2.
llvm-svn: 126350
2011-02-24 01:05:30 +00:00
Argyrios Kyrtzidis 506220fef7 [analyzer] Migrate StackAddrLeakChecker to CheckerV2.
llvm-svn: 126333
2011-02-23 21:04:54 +00:00
Argyrios Kyrtzidis f1b5d1f01b [analyzer] Refactor EndOfFunctionNodeBuilder.
-Introduce EndOfFunctionNodeBuilder::withCheckerTag to allow it be "specialized" with a
 checker tag and not require the checkers to pass a tag.
-For EndOfFunctionNodeBuilder::generateNode, reverse the order of tag/P parameters since
 there are actual calls that assume the second parameter is ExplodedNode.

llvm-svn: 126332
2011-02-23 21:04:49 +00:00
Argyrios Kyrtzidis 66b38c2261 [analyzer] Migrate IdempotentOperationChecker to CheckerV2.
llvm-svn: 126331
2011-02-23 21:04:44 +00:00
Argyrios Kyrtzidis 68cab73ab9 [analyzer] const goodness.
llvm-svn: 126326
2011-02-23 19:38:45 +00:00
Argyrios Kyrtzidis d0732a660a [analyzer] Rename runPathSensitiveCheckers -> expandGraphWithCheckers.
llvm-svn: 126325
2011-02-23 19:38:41 +00:00
Argyrios Kyrtzidis da02a25ae6 [analyzer] Migrate ChrootChecker to CheckerV2.
llvm-svn: 126324
2011-02-23 19:38:39 +00:00
Argyrios Kyrtzidis bf61d97a98 [analyzer] Migrate UnreachableCodeChecker to CheckerV2.
llvm-svn: 126308
2011-02-23 07:19:23 +00:00
Argyrios Kyrtzidis aad8372516 [analyzer] Migrate to CheckerV2:
NSAutoreleasePoolChecker
	ObjCAtSyncChecker

llvm-svn: 126307
2011-02-23 07:19:18 +00:00
Argyrios Kyrtzidis 99ea46462a [analyzer] Add LangOptions in CheckerManager.
llvm-svn: 126306
2011-02-23 07:19:14 +00:00
Ted Kremenek 80861ca9b5 Migrate CFGReachabilityAnalysis out of the IdempotentOperationsChecker and into its own analysis file.
llvm-svn: 126289
2011-02-23 01:51:59 +00:00
Ted Kremenek cc7f1f8c2e Have IdempotentOperationsChecker pull its CFGStmtMap from AnalysisContext.
llvm-svn: 126288
2011-02-23 01:51:53 +00:00
Argyrios Kyrtzidis dff865d10b [analyzer] Migrate to CheckerV2:
CastToStructChecker
	FixedAddressChecker
	MacOSXAPIChecker
	PointerArithChecker
	PointerSubChecker
	PthreadLockChecker
	UnixAPIChecker

llvm-svn: 126284
2011-02-23 01:05:36 +00:00
Argyrios Kyrtzidis dd058d8a50 [analyzer] Migrate the BasicObjCFoundationChecks to CheckerV2:
NilArgChecker
	CFNumberCreateChecker
	ClassReleaseChecker

llvm-svn: 126275
2011-02-23 00:16:10 +00:00
Argyrios Kyrtzidis 22f2586bfb [analyzer] Fix CheckerManager::runCheckersForObjCMessage.
It would run PostObjCMessage checkers even for PreObjCMessage checking.

llvm-svn: 126274
2011-02-23 00:16:07 +00:00
Argyrios Kyrtzidis a1540db6e4 [analyzer] Refactor BugTypes and their ownership model.
-In general, don't have the BugReporter deleting BugTypes, BugTypes will eventually become owned by checkers
 and outlive the BugReporter. In the meantime, there will be some leaks since some checkers assume that
 the BugTypes they create will be destroyed by the BugReporter.
-Have BugReporter::EmitBasicReport create BugTypes that are reused if the same name & category strings
 are passed to EmitBasicReport. These BugTypes are owned and destroyed by the BugReporter.
 This allows bugs reported through EmitBasicReport to be coalesced.
-Remove the llvm::FoldingSet<BugReportEquivClass> from BugType and move it into the BugReporter.
 For uniquing BugReportEquivClass also use the BugType* so that we can iterate over all of them using only one set.

llvm-svn: 126272
2011-02-23 00:16:01 +00:00
Argyrios Kyrtzidis ed35cf271d [analyzer] Start moving the path-sensitive checkers to CheckerV2.
-Migrate ObjCSelfInitChecker to CheckerV2. In the process remove the 'preCallSelfFlags' field
 from the checker class and use GRState for storing that info.
-Get ExprEngine to start delegating checker running to CheckerManager.

llvm-svn: 126229
2011-02-22 17:30:38 +00:00
Ted Kremenek fb1a79af7a Add CStringChecker support for strncpy. Patch by Lenny Maiorani!
llvm-svn: 126188
2011-02-22 04:58:34 +00:00
Ted Kremenek 280a01fa1b Add CStringChecker support for strnlen. Patch by Lenny Maiorani!
llvm-svn: 126187
2011-02-22 04:55:05 +00:00
Oscar Fuentes 6f72540e46 New function for tablegenning: clang_tablegen.
llvm-svn: 126093
2011-02-20 22:06:32 +00:00
Oscar Fuentes e9c7994669 Correct name of dependent target.
CMake complained about this while generating VS project files but was
okay with it while generating makefiles on Linux.

llvm-svn: 126090
2011-02-20 19:41:34 +00:00
Oscar Fuentes f7fa56f25f Fix some add_dependencies.
The syntax is (add_dependencies target-name depend-target1 ...).

llvm-svn: 126049
2011-02-19 21:38:48 +00:00
Argyrios Kyrtzidis eb8357c1d8 [analyzer] Fix crash when analyzing C++ code.
llvm-svn: 126025
2011-02-19 08:03:18 +00:00