summaryrefslogtreecommitdiffstats
path: root/clang/lib/Checker/RegionStore.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Use the element type to compute the array size when the base region is a ↵Zhongxing Xu2010-04-011-3/+6
| | | | | | | | VarRegion. Patch by Jordy Rose. llvm-svn: 100099
* Fix a bug (PR 6699) in RegionStore::RemoveDeadBindings() whereTed Kremenek2010-04-011-32/+31
| | | | | | array values with a non-zero offset would get prematurely pruned from the store. llvm-svn: 100067
* RegionStore: specially handle loads from integer global variables declared ↵Ted Kremenek2010-03-301-1/+16
| | | | | | | | 'const'. Fixes a false positive reported in PR 6288. llvm-svn: 99922
* Use 'const Optional<SVal>&' to avoid an extra copy.Ted Kremenek2010-03-301-8/+8
| | | | llvm-svn: 99921
* Bind the constructed object value to CXXConstructExpr.Zhongxing Xu2010-03-231-3/+2
| | | | llvm-svn: 99271
* Mark CXXThisRegion in the current or parent stack frame context as live so thatZhongxing Xu2010-03-171-4/+18
| | | | | | their bindings are not removed. llvm-svn: 98705
* Add VisitCXXContructExpr logic to the analyzer. This still has not fully workedZhongxing Xu2010-03-161-9/+22
| | | | | | since RemoveDeadBinding mistakenly remove the binding to CXXThisRegion. llvm-svn: 98629
* Simplify assertion.Ted Kremenek2010-03-101-5/+1
| | | | llvm-svn: 98176
* Remove '#if 0' code. Lazy compound values have proven their worth.Ted Kremenek2010-03-101-39/+0
| | | | llvm-svn: 98175
* Remove the subregion map cache. It is no longer used.Ted Kremenek2010-03-101-8/+0
| | | | llvm-svn: 98161
* Fix stale comment.Ted Kremenek2010-03-101-1/+1
| | | | llvm-svn: 98160
* Really apply (unnoticed weird git-svn merge conflict in 98144): Refactor ↵Ted Kremenek2010-03-101-299/+290
| | | | | | | | | | | RegionStore::RemoveDeadBindings to use the same core cluster analysis algorithm as RegionStore::InvalidateRegions(). Beyond simplifying the algorithm significantly, we no longer need to build subregion maps in RemoveDeadBindings(). This and other changes cause a significant speedup: the time to analyze sqlite3.c (single core) drops by 14%. llvm-svn: 98159
* Refactor RegionStore::RemoveDeadBindings to use the same coreTed Kremenek2010-03-101-87/+87
| | | | | | | | | | | cluster analysis algorithm as RegionStore::InvalidateRegions(). Beyond simplifying the algorithm significantly, we no longer need to build subregion maps in RemoveDeadBindings(). This and other changes cause a significant speedup: the time to analyze sqlite3.c (single core) drops by 14%. llvm-svn: 98144
* Refactor some of RegionStore's InvalidateRegionsWorker classTed Kremenek2010-03-101-62/+86
| | | | | | | into a 'ClusterAnalysis' parent class. The idea is to potentially reuse this for reworking RemoveDeadBindings. llvm-svn: 98143
* Since now we store the cast type with an ElementRegion, there isZhongxing Xu2010-03-011-5/+5
| | | | | | no need to store a type with SymbolRegionValue. llvm-svn: 97437
* Assert when loading from a code text region instead of returning an unknown ↵Zhongxing Xu2010-03-011-1/+3
| | | | | | silently. llvm-svn: 97436
* Enhance RegionStore::InvalidateRegions() to correctly invalidate bindingsTed Kremenek2010-02-131-12/+32
| | | | | | by scanning through the values of LazyCompoundVals. llvm-svn: 96067
* Pull logic for visiting value bindings in InvalidateRegionsWorker into a ↵Ted Kremenek2010-02-131-20/+28
| | | | | | | | separate method. No functionality change. llvm-svn: 96060
* Eliminate the ASTContext parameter from RecordDecl::getDefinition()Douglas Gregor2010-02-111-1/+1
| | | | | | | and CXXRecordDecl::getDefinition(); it's totally unnecessary. No functionality change. llvm-svn: 95836
* Add comment.Zhongxing Xu2010-02-101-1/+2
| | | | llvm-svn: 95755
* Fix lookup of fields from lazy bindings to check if the region isTed Kremenek2010-02-091-9/+5
| | | | | | | | NULL, not the store, to determine if a lookup succeeded. The store can be null if it contained no bindings. This fixes a false positive reported to me by a user of the analyzer. llvm-svn: 95679
* Revert 95541.Ted Kremenek2010-02-081-1/+1
| | | | llvm-svn: 95545
* Rename: GRState::getSVal(Stmt*) => getExprVal(),Zhongxing Xu2010-02-081-1/+1
| | | | | | GRState::getSVal(MemRegion*) => Load(). llvm-svn: 95541
* Like for symbolic region, automatically create a element zero region for Zhongxing Xu2010-02-081-15/+5
| | | | | | alloca region. llvm-svn: 95539
* Unify the implementation of getLValueElement of store managers.Zhongxing Xu2010-02-081-57/+0
| | | | | | | It's more sophisticated than the original one of BasicStore. But it does matter. llvm-svn: 95536
* Unify the implementation of getLValueIvar and getLValueField of store managers.Zhongxing Xu2010-02-081-55/+0
| | | | llvm-svn: 95535
* Move common methods to the base StoreManager class.Zhongxing Xu2010-02-081-33/+0
| | | | llvm-svn: 95534
* Also teach RegionStore::RetrieveVar() to handle 'static' pointers that are ↵Ted Kremenek2010-02-061-1/+3
| | | | | | implicitly initialized to NULL. llvm-svn: 95479
* Fix regression in RegionStore (from BasicStore) where static variables were ↵Ted Kremenek2010-02-061-3/+15
| | | | | | not treated as being implicitly initialized to 0 (and instead were getting symbolicated). llvm-svn: 95478
* Teach RegionStore::InvalidateRegions() to also invalidate static variables ↵Ted Kremenek2010-02-061-4/+5
| | | | | | referenced by blocks. llvm-svn: 95459
* More GRState* -> Store changes.Zhongxing Xu2010-02-051-6/+4
| | | | llvm-svn: 95365
* Remove unused parameter.Zhongxing Xu2010-02-051-4/+2
| | | | llvm-svn: 95364
* More GRState* -> Store changes.Zhongxing Xu2010-02-051-6/+3
| | | | llvm-svn: 95362
* More GRState* -> Store changes.Zhongxing Xu2010-02-051-111/+92
| | | | llvm-svn: 95360
* More GRState* -> Store changes.Zhongxing Xu2010-02-051-31/+26
| | | | llvm-svn: 95357
* Change LazyCompoundVal to a <Store, MemRegion*> pair. We really don't need toZhongxing Xu2010-02-051-46/+46
| | | | | | spread GRState* everywhere. llvm-svn: 95354
* Cast evaluation no longer touch GRState.Zhongxing Xu2010-02-041-3/+2
| | | | llvm-svn: 95290
* Remove stray typo.Ted Kremenek2010-02-041-1/+1
| | | | llvm-svn: 95286
* Now that CastRetrievedVal returns SVal, there is no need to use CastResult.Zhongxing Xu2010-02-041-29/+16
| | | | llvm-svn: 95279
* Fix regression in RegionStore due to recent changes inTed Kremenek2010-02-031-84/+90
| | | | | | | | | RegionStoreManager::InvalidateRegions() by adjusting the worklist to iterate over BindingKeys instead of MemRegions. We also only need to do the actual invalidation work on base regions, and for non-base regions just blow away their bindings. llvm-svn: 95200
* Rework RegionStoreManager's implementation of InvalidateRegions() toTed Kremenek2010-02-031-214/+249
| | | | | | | | | | | | | | | | | | | | | not build a subregion map and instead do a single scan of the store. This is done by building "region clusters" that represent the collection of regions that have the same base region. Invalidating any region in a cluster means that they all should get invalidated. This change brought out a point that Zhongxing mentioned to me offline: the flattened memory binding has issues distinguishing between direct and default bindings. For example, setting the default value for an entire struct is the same as binding to the first element. To address this problem, I moved the binding "tag" (Direct or Default) from BindingVal to BdingKey (and removed BindingVal entirely). This requires us to do double lookups in some cases; and there is still much more cleanup that can be done. This change produced a noticeable speedup when analyzing sqlite3 (a reduction of 4% in running time). llvm-svn: 95193
* Remove RegionStoreSubRegionMap::iterator and ↵Ted Kremenek2010-02-021-26/+28
| | | | | | RegionStoreSubRegionMap::begin_end(). This is a precursor to using DenseSet to represent region sets instead of ImmutableSet. llvm-svn: 95151
* Add missing call to Optional<...>.getValue() that was pointed out by Chandler.Ted Kremenek2010-01-271-1/+1
| | | | llvm-svn: 94678
* Teach RegionStore to handle initialization of incomplete arrays in ↵Ted Kremenek2010-01-261-11/+18
| | | | | | structures using a compound value. Fixes <rdar://problem/7515938>. llvm-svn: 94622
* Split libAnalysis into two libraries: libAnalysis and libChecker.Ted Kremenek2010-01-251-0/+2015
(1) libAnalysis is a generic analysis library that can be used by Sema. It defines the CFG, basic dataflow analysis primitives, and inexpensive flow-sensitive analyses (e.g. LiveVariables). (2) libChecker contains the guts of the static analyzer, incuding the path-sensitive analysis engine and domain-specific checks. Now any clients that want to use the frontend to build their own tools don't need to link in the entire static analyzer. This change exposes various obvious cleanups that can be made to the layout of files and headers in libChecker. More changes pending. :) This change also exposed a layering violation between AnalysisContext and MemRegion. BlockInvocationContext shouldn't explicitly know about BlockDataRegions. For now I've removed the BlockDataRegion* from BlockInvocationContext (removing context-sensitivity; although this wasn't used yet). We need to have a better way to extend BlockInvocationContext (and any LocationContext) to add context-sensitivty. llvm-svn: 94406
OpenPOWER on IntegriCloud