aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer
AgeCommit message (Collapse)Author
2011-08-21[analyzer] Remove FIXME; Ted reminded me that -init is not guaranteed to ↵Jordy Rose
return its receiver and pretending that it does won't actually buy us anything. (Comment change only.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138221 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-21[analyzer] Migrate return value handling from CFRefCount to ExprEngine. This ↵Jordy Rose
seems to result in a minor performance hit, but I think that will go away again once we eliminate TransferFuncs from function calls entirely. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138220 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-21[analyzer] Replace calls to getNameAsString() with StringRef equivalents.Jordy Rose
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138215 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20Fix compile on platforms that don't implicitly include stdarg.h here.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138214 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20[analyzer] RetainReleaseChecker always wants region change updates. There's ↵Jordy Rose
no need for a flag, at least not right now. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138212 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20Fix indentation.Jordy Rose
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138211 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20[analyzer] Move handling of hardcoded noreturn ("panic") methods from ↵Jordy Rose
CFRefCount to NoReturnFunctionChecker. No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138210 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20[analyzer] Handle reads of ObjCPropertyRefExprs implicitly in Environment. ↵Ted Kremenek
No need to bind an explicit value and create a new node. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138196 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20[analyzer] Simplify ExprEngine::VisitBinaryOperator() by removing recursive ↵Ted Kremenek
visit to subexpressions (which is no longer needed). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138195 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20Start partitioning ExprEngine.cpp into separate .cpp files that handle ↵Ted Kremenek
different parts of the analysis (e.g., analysis of C expressions, analysis of Objective-C expressions, and so on). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138194 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20Rename CXXExprEngine.cpp to ExprEngineCXX.cpp.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138193 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20Static Analyzer Diagnostics: Move the responsibility for generating the ↵Anna Zaks
endOfPath diagnostic piece from BugReport to BugReporterVisitor. Switch CFRefCount to use visitors in order to generate the endOfPath piece. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138184 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-20Remove dead code.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138183 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-19Static Analyzer Diagnostics: Switch CFRefCount to using the new visitor API. ↵Anna Zaks
BugReport no longer needs to inherit from BugReporterVisitor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138142 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-19Static Analyzer Diagnostics: Kill the addVisitorCreator(callbackTy, void*) ↵Anna Zaks
API in favor of addVisitor(BugReporterVisitor*). 1) Create a header file to expose the predefined visitors. And move the parent(BugReporterVisitor) there as well. 2) Remove the registerXXXVisitor functions - the Visitor constructors/getters can be used now to create the object. One exception is registerVarDeclsLastStore(), which registers more then one visitor, so make it static member of FindLastStoreBRVisitor. 3) Modify all the checkers to use the new API. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138126 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-19Fix a memory leak in the analyzer - BugReports didn't get freed. Plus, ↵Anna Zaks
remove invalid assert from the destructor which wasn't called previously due to the leak. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138027 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-18Static Analyzer Diagnostics: Move custom diagnostic visitors from ↵Anna Zaks
BugReporterContext to BugReport. One API change: I added BugReporter as an additional parameter to the BugReporterVisitor::VisitNode() method to allow visitors register other visitors with the report on the fly (while processing a node). This functionality is used by NilReceiverVisitor, which registers TrackNullOrUndefValue when the receiver is null. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@138001 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17Remove DiagBugReport by pulling it into its parent BugReport.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137899 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17Remove EnhancedBugReport and RangedBugReport - pull all the extra ↵Anna Zaks
functionality they provided into their parent BugReport. The only functional changes are: made getRanges() non const - it adds default range to Ranges if none are supplied, made getStmt() private, which was another FIXME. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137894 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17[analyzer] Migrate assumption and binding handling from CFRefCount to ↵Jordy Rose
RetainReleaseChecker. This is mostly a textual move and required no supporting changes. No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137874 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17Fix a handful of dead stores found by Clang's static analyzer. There's a ↵Ted Kremenek
bunch of others I haven't touched. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137867 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17Fix typo.Jordy Rose
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137814 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17[analyzer] Add a warning for an incompatible plugin version.Jordy Rose
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137813 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17Silence compiler warnings by casting object pointers to function pointers ↵Benjamin Kramer
via intptr_t. This is ugly but ISO C++ doesn't allow direct casts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137812 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-17[analyzer] Add basic support for pluggable checkers.Jordy Rose
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137802 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] teach ExprEngine about loads from static C++ class fields. Fixes ↵Ted Kremenek
<rdar://problem/9948787>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137760 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] Overhaul of checker registration in preparation for basic plugin ↵Jordy Rose
support. Removes support for checker groups (we can add them back in later if we decide they are still useful), and -analyzer-checker-help output is a little worse for the time being (no packages). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137758 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16MacOSKeychainAPIChecker: Turn it on by default.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137740 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16MacOSKeychainAPIChecker: Do not report double allocation if first allocation ↵Anna Zaks
returned an error. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137720 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] Enhance ConditionVisitor to handle arbitrary ValueDecls in binary ↵Ted Kremenek
expressions, and also handle inverting the order of comparison when the named decl appears on the RHS. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137714 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] fix operation inversion calculation in ConditionVisitor.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137708 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] Enhance ConditionVisitor to understand eagerly evaluated (simple) ↵Ted Kremenek
binary conditions, and teach it to only focus on constraint changes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137705 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] add ExprEngine::getEagerlyAssumedTags() to allow externally ↵Ted Kremenek
querying of "eagerly assumed" expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137704 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-16[analyzer] Remove PostStmtCustom ProgramPoint. It can be represented using ↵Ted Kremenek
tagged PostStmts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137697 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-15MacOSKeychainAPIChecker: The security API/memory leak checker should always ↵Anna Zaks
generate regular nodes instead of sink nodes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137681 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-15Add ProgramState.cpp.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137677 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-15Rename GRState to ProgramState, and cleanup some code formatting along the way.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137665 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-15MacOSKeychainAPIChecker: Use llvm::SmallString instead of std::string (as ↵Anna Zaks
per code review for r137523). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137633 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12Cleanup various declarations of 'Stmt*' to be 'Stmt *', etc. in libAnalyzer ↵Ted Kremenek
and libStaticAnalyzer[*]. It was highly inconsistent, and very ugly to look at. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137537 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12[analyzer] change "tag" in ProgramPoint from "void*" to a ProgramPointTag*.Ted Kremenek
Having a notion of an actual ProgramPointTag will aid in introspection of the analyzer's behavior. For example, the GraphViz output of the analyzer will pretty-print the tags in a useful manner. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137529 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12MacOSKeychainAPIChecker: If the allocated data address entered as an ↵Anna Zaks
enclosing function parameter, skip it to avoid false positives. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137526 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12MacOSKeychainAPIChecker: Anna Zaks
Report errors earlier: on checkDeadSymbols() and clear the state after the symbol we are tracking goes out of scope. Also, perform lazy error checking. Instead of forcing the paths to be split depending one the return value of the allocator, make the return symbol depend on the allocated data symbol, which prolongs its life span to the time when the allocated data symbol becomes dead. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137523 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12[analyzer] Nitpicks on Olaf's patch, which I meant to e-mail but then didn't inJordy Rose
time. One is cleanup, the other is me being OCD about enum group nesting. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137517 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12MacOSKeychainAPIChecker: There is no need to use SymbolMetadata to represent ↵Anna Zaks
the allocated data symbol, we can just use the symbol corresponding to the SymbolicRegion. This simplifies tracking of the symbol, for example, SymbolMetadata needs to go through extra hoops to stay alive. Make AllocationState internal to the MacOSKeychainAPIChecker class. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137514 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12[analyzer] Introduce new MemRegion, "TypedValueRegion", so that we can ↵Ted Kremenek
separate TypedRegions that implement getValueType() from those that don't. Patch by Olaf Krzikalla! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137498 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-12Optimizations for Dependent Symbol tracking (as per Ted's code review for ↵Anna Zaks
r137309): 1) Change SymbolDependTy map to keep pointers as data. And other small tweaks like making the DenseMap smaller 64->16 elements; remove removeSymbolDependencies() as it will probably not be used. 2) Do not mark dependents live more then once. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137401 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-11Analyzer Core: Adding support for user-defined symbol dependencies. (For ↵Anna Zaks
example, the allocated resource symbol only needs to be freed if no error has been returned by the allocator, so a checker might want to make the lifespan of the error code symbol depend on the allocated resource symbol.) Note, by default, the map that holds the dependencies will get destroyed along with the SymbolManager at the end of function exploration. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137309 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-11Cleanup: remove CleanedSate member and GetState() wrapper from ↵Anna Zaks
StmtNodeBuilder, not needed as of r137273. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137284 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-10Cleanup: remove GetState() wrapper from ExprEngine, not needed as of r137273.Anna Zaks
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137279 91177308-0d34-0410-b5e6-96231b3b80d8
2011-08-10Analyzer Core: In checkDeadSymbols checker callback, provide the state in ↵Anna Zaks
which the symbols are not yet deleted so that checkers could inspect them. Since we are now always creating a transition in ProcessStmt(), remove the logic for adding a transition when none was generated. TODO: the extra transitions will have to be removed; more cleanups; a checker that tests teh new fucntionality. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@137273 91177308-0d34-0410-b5e6-96231b3b80d8