aboutsummaryrefslogtreecommitdiff
path: root/include
AgeCommit message (Collapse)Author
2009-08-06Refactor RegionStoreManager::RemoveDeadBindings to also scan the bindings of ↵Ted Kremenek
LazyCompoundSVals. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78284 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Support nested-name-specifiers for C++ member access expressions, e.g.,Douglas Gregor
this->Base::foo from James Porter! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78278 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06First pass at friend semantics.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78274 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06As GRState seems general enough, it is time to merge some template classes Zhongxing Xu
and their impl base classes. This can greatly simply some code of the core analysis engine. This patch merges ExplodedNodeImpl into ExplodedNode. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78270 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Implement lazy "copying" of structures and arrays in RegionStore. WhileTed Kremenek
RegionStore already lazily abstracted the contents of arrays and structs, when doing an assignment from one array/struct to another we did an explicit element-wise copy, which resulted in a loss of laziness and huge performance problem when analyzing many code bases. Now RegionStoreManager handles such assignments using a new SVal could 'LazyCompoundSVal', which basically means the value of a given struct or array (a MemRegion*) in a specific state (GRState). When we do a load from a field whose encompassing struct binds to a LazyCompoundSVal, we essentially do a field lookup in the original structure. This means we have essentially zero copying of data for structs/arrays and everything stays lazy. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78268 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Update for LLVM API change.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78259 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Calculate the primary base class better and use that when laying downMike Stump
the vtable. Still a work in progress. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78252 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Translate -mcmodel=X to -code-model X and pass it to clang-cc. Patch by ↵Benjamin Kramer
Pawel Worach! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78190 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Add support for the -fno-omit-frame-pointer option. Patch by Roman Divacky!Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78188 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Fix a comment that trailed offDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78167 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Introduce the canonical type smart pointers, and use them in a few places toDouglas Gregor
tighten up the static type system. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78164 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05If the UnaryOperator has non-location type, use its type to create theZhongxing Xu
constant value. If the UnaryOperator has location type, create the constant with int type and pointer width. This fixes the bug that all pointer increments 'p++' evaluated to Unknown. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78147 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Support for use of default argument in constructors.Fariborz Jahanian
work in progress. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78132 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-04Refactor template instantiation for types into a generic treeDouglas Gregor
transformation template (TreeTransform) that handles the transformation and reconstruction of AST nodes. Template instantiation for types is a (relatively small) customization of the generic tree transformation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78071 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-04Compare matching selectors in current andFariborz Jahanian
super class(s) and warn on any parameter type mismatch if potentially unsafe. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78029 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Per advice that Doug Gregor gave me several months ago, clean up theTed Kremenek
implementation of '#pragma unused' by not constructing intermediate DeclRefExprs, but instead do the name lookup directly. The implementation is greatly simplified. Along the way, degrade '#pragma unused(undeclaredvariable)' to a warning instead of being a hard error. This implements: <rdar://problem/6761874> [sema] allow #pragma unused to reference undefined variable (with warning) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78019 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Regression fix: reset 'DisplayedFunction' when a new function/method decl ↵Ted Kremenek
gets analyzed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77996 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Refactor methods on DeclSpec to take a diagnostic& parameter, and reflect thisJohn McCall
elsewhere. Very slightly decouples DeclSpec users from knowing the exact diagnostics to report, and makes it easier to provide different diagnostics in some places. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77990 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Templatize BadSpecifier and introduce DeclSpec::getSpecifier(T) for theJohn McCall
remaining specifier enums T. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77981 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03add a bunch of routine methods to AnalysisContext.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77961 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Tweak diagnostic wording; patch by Sean Hunt.Eli Friedman
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77955 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03now we can let AnalysisManager to own the PathDiagnosticClient.Zhongxing Xu
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77945 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Create only one AnalysisManager for each translation unit. In HandleCode(),Zhongxing Xu
reset the current analysis context of the AnalysisManager. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77943 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-03Add LocationContext classes to enable creation of cross function Zhongxing Xu
ProgramPoints. ProgramPoints will refer to them in the furture. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77941 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-02Produce a warning that partial ordering of function templates is not yet ↵Douglas Gregor
supported git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77928 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-02Keep track of the template arguments deduced when matching a classDouglas Gregor
template partial specialization. Then, use those template arguments when instantiating members of that class template partial specialization. Fixes PR4607. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77925 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-02Use the correct cast kind for dynamic_cast.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77905 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-02Remove RegionViews and RegionCasts. These are no longer used.Ted Kremenek
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77876 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-02RegionStoreManager::RemoveDeadBindings() now removes dead 'default' bindings ↵Ted Kremenek
as well. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77875 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-02Generalize the interface of 'StoreManager::RemoveDeadBindings()' to ↵Ted Kremenek
manipulate the entire GRState, not just the Store. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77870 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-01This is a fairly large patch, which resulted from a cascade of changesTed Kremenek
made to RegionStore (and related classes) in order to handle some analyzer failures involving casts and manipulation of symbolic memory. The root of the change is in StoreManager::CastRegion(). Instead of using ad hoc heuristics to decide when to layer an ElementRegion on a casted MemRegion, we now always layer an ElementRegion when the cast type is different than the original type of the region. This carries the current cast information associated with a region around without resorting to the error prone recording of "casted types" in GRState. Along with this new policy of layering ElementRegions, I added a new algorithm to strip away existing ElementRegions when they simply represented casts of a base memory object. This algorithm computes the raw "byte offset" that an ElementRegion represents from the base region, and allows the new ElementRegion to be based off that offset. The added benefit is that this naturally handles a series of casts of a MemRegion without building up a set of redundant ElementRegions (thus canonicalizing the region view). Other related changes that cascaded from this one (as tests were failing in RegionStore): - Revamped RegionStoreManager::InvalidateRegion() to completely remove all bindings and default values from a region and all subregions. Now invalidated fields are not bound directly to new symbolic values; instead the base region has a "default" symbol value from which "derived symbols" can be created. The main advantage of this approach is that it allows us to invalidate a region hierarchy and then lazily instantiate new values no matter how deep the hierarchy went (i.e., regardless of the number of field accesses, e.g. x->f->y->z->...). The previous approach did not do this. - Slightly reworked RegionStoreManager::RemoveDeadBindings() to also incorporate live symbols and live regions that do not have direct bindings but also have "default values" used for lazy instantiation. The changes to 'InvalidateRegion' revealed that these were necessary in order to achieve lazy instantiation of values in the region store with those bindings being removed too early. - The changes to InvalidateRegion() and RemoveDeadBindings() revealed a serious bug in 'getSubRegionMap()' where not all region -> subregion relationships involved in actually bindings (explicit and implicit) were being recorded. This has been fixed by using a worklist algorithm to iteratively fill in the region map. - Added special support to RegionStoreManager::Bind()/Retrieve() to handle OSAtomicCompareAndSwap in light of the new 'CastRegion' changes and the layering of ElementRegions. - Fixed a bug in SymbolReaper::isLive() where derived symbols were not being marked live if the symbol they were derived from was also live. This fix was critical for getting lazy instantiation in RegionStore to work. - Tidied up the implementation of ValueManager::getXXXSymbolVal() methods to use SymbolManager::canSymbolicate() to decide whether or not a symbol should be symbolicated. - 'test/Analysis/misc-ps-xfail.m' now passes; that test case has been moved to 'test/Analysis/misc-ps.m'. - Tweaked some pretty-printing of MemRegions, and implemented 'ElementRegion::getRawOffset()' for use with the CastRegion changes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77782 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Add beginnigs of rtti generation, wire up more of -fno-exceptions.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77751 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31And now we can generate a simple vtable. Still a work in progress...Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77737 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Allow one to update the type representation of the declaration specifiers. ↵Douglas Gregor
Will be used by an upcoming commit. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77703 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Fix 80-col violationDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77683 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Canonicalize dependent extended vector types.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77663 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Rename Action::TagKind to Action::TagUseKind, which removes both a misnomerJohn McCall
and a name collision. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77658 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31sp.John McCall
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77656 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Add CK_DerivedToBase and use it PerformObjectMemberConversion.Anders Carlsson
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77652 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Add a CastKind enum to CastExpr. Right now it's not used for much but it ↵Anders Carlsson
will be :) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77650 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Fix use-after-release bug introduced in r77585 where the PathDiagnosticClientTed Kremenek
created by AnalysisConsumer would be released by an instance of AnalysisManager and then reused by later instances of AnalysisManager. Ownership of the PathDiagnosticClient now belongs (for now) in AnalysisConsumer. We also need this layering (for now) because the HTMLDiagnostiClient requires that the entire translation unit be processed before emitting diagnostics. This is done in its destructor (which should also be fixed, but that is another issue). This fixes PR 4653. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77648 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-31Build canonical types for dependently-sized array types.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77647 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30Canonicalization of dependent C++0x decltype types.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77643 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30Canonicalization for dependent typeof(expr) types.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77639 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30Patch for future ir-gen for destructor calls.Fariborz Jahanian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77608 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30Support out-of-line definitions of the members of class templateDouglas Gregor
partial specializations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77606 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30Make AnalysisManager into its own source file and a pure data management class. Zhongxing Xu
Move all components creation code into AnalysisConsumer::DigestAnalyzerOptions(). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77585 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30PR3679 - handle #pragma weakRyan Flynn
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77573 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30This patch collects all analysis context data into a new class Zhongxing Xu
AnalysisContext. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77563 91177308-0d34-0410-b5e6-96231b3b80d8
2009-07-30Fix type to be consistent with the rest of the code.Mike Stump
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77560 91177308-0d34-0410-b5e6-96231b3b80d8