| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
follow.
llvm-svn: 75748
|
| |
|
|
| |
llvm-svn: 75745
|
| |
|
|
| |
llvm-svn: 75738
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
needs more finesse when handling the invalidation of pointers. Pointers that were invalidated as integers could later cause problems for clients using them as pointers. It is easier for us to model a symbolic value as a pointer rather than modeling a non-symbolic value as a pointer.
This patch causes:
- StoreManager::InvalidateRegion() to not used the casted type of a region if
it would cause a pointer type to be invalidated as a non-pointer type.
- Pushes RegionStore::RetrieveElement() further by handling retrievals from
symbolic arrays that have been invalidated. This uses the new SymbolDerived
construct that was recently introduced.
The result is that the failing test in misc-ps-region-store-x86_64.m now passes.
Both misc-ps-region-store-x86_64.m and misc-ps-region-store-i386.m contain a
test case that motivated this change.
llvm-svn: 75730
|
| |
|
|
|
|
|
|
| |
SymbolDerived allows us to model symbolic values that are related to other
symbols via a region hierarchy. For example, SymbolDerived can be used to model
individual values of a symbolic array.
llvm-svn: 75728
|
| |
|
|
| |
llvm-svn: 75713
|
| |
|
|
|
|
| |
do this by silently wrapping the region with an ElementRegion. This fixes the failures in misc-ps-region-store.m.
llvm-svn: 75679
|
| |
|
|
| |
llvm-svn: 75672
|
| |
|
|
|
|
| |
I don't love the name, however it simplifies the code and is a worthwhile change. If/when we come up with a better name, we can do a search/replace.
llvm-svn: 75650
|
| |
|
|
|
|
|
|
| |
invalidate the region correctly. It uses the cast-to type to invalidate
the region when available. To avoid invalid cast-to type like 'void*' or 'id',
region store now only records non-generic casts of regions.
llvm-svn: 75580
|
| |
|
|
|
|
|
| |
are not explicitly marked as not accepting NULL pointers. This check illustrates
how we need more refactoring in the custom-check logic.
llvm-svn: 75570
|
| |
|
|
|
|
| |
and implementing operator<< support for llvm::raw_ostream.
llvm-svn: 75560
|
| |
|
|
|
|
| |
symbol used for the region (makes it easier to read for nested regions).
llvm-svn: 75550
|
| |
|
|
|
|
| |
convention and style similar to other elements in Clang.
llvm-svn: 75548
|
| |
|
|
|
|
|
|
|
|
|
|
| |
where we are comparing a symbolic value against itself, regardless of
the nature of that symbolic value.
This enhancement identified a case where RegionStoreManager is not
correctly symbolicating the values of the pointees of parameters. The
failing test is now in 'test/Analysis/misc-ps-region-store.m', with
that test file now (temporarily) marked XFAIL.
llvm-svn: 75521
|
| |
|
|
|
|
|
|
| |
void* values that are bound
to symbolic regions and then treated like integers.
llvm-svn: 75356
|
| |
|
|
|
|
|
| |
MemRegion kinds. This allows the compiler to identify what MemRegions we don't
handle for pointer arithmetic.
llvm-svn: 75326
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The idea is to segregate Objective-C "object" pointers from general C pointers (utilizing the recently added ObjCObjectPointerType). The fun starts in Sema::GetTypeForDeclarator(), where "SomeInterface *" is now represented by a single AST node (rather than a PointerType whose Pointee is an ObjCInterfaceType). Since a significant amount of code assumed ObjC object pointers where based on C pointers/structs, this patch is very tedious. It should also explain why it is hard to accomplish this in smaller, self-contained patches.
This patch does most of the "heavy lifting" related to moving from PointerType->ObjCObjectPointerType. It doesn't include all potential "cleanups". The good news is additional cleanups can be done later (some are noted in the code). This patch is so large that I didn't want to include any changes that are purely aesthetic.
By making the ObjC types truly built-in, they are much easier to work with (and require fewer "hacks"). For example, there is no need for ASTContext::isObjCIdStructType() or ASTContext::isObjCClassStructType()! We believe this change (and the follow-up cleanups) will pay dividends over time.
Given the amount of code change, I do expect some fallout from this change (though it does pass all of the clang tests). If you notice any problems, please let us know asap! Thanks.
llvm-svn: 75314
|
| |
|
|
|
|
|
| |
over the types of MemRegions. This allows the compiler to warn us which regions
are not handled, and also is a little faster.
llvm-svn: 75304
|
| |
|
|
|
|
|
|
| |
CodeTextRegions can only be casted to FunctionPointer or BlockPointerTypes. This
simply isn't true. We can handle bogus operations on CodeTextRegions (e.g, an
array access) elsewhere.
llvm-svn: 75285
|
| |
|
|
|
|
| |
void**, void***, etc. Such casts should just pass the region through.
llvm-svn: 75281
|
| |
|
|
|
|
| |
to hopefully resolve template lookup ambiguities on some compilers.
llvm-svn: 75253
|
| |
|
|
|
|
|
|
| |
and replace the 'clang-cc' option '-analyzer-store=basic-new-cast' with
'-analyzer-store=basic-old-cast'. We'll keep the old CastRegion implementation
around for a little while for regression testing.
llvm-svn: 75209
|
| |
|
|
| |
llvm-svn: 75127
|
| |
|
|
| |
llvm-svn: 74890
|
| |
|
|
|
|
| |
types.
llvm-svn: 74884
|
| |
|
|
| |
llvm-svn: 74877
|
| |
|
|
|
|
|
| |
region type. This better shows the logic of the method and allows the compiler
to check if we didn't handle a specific region kind.
llvm-svn: 74876
|
| |
|
|
| |
llvm-svn: 74875
|
| |
|
|
| |
llvm-svn: 74874
|
| |
|
|
| |
llvm-svn: 74872
|
| |
|
|
|
|
|
|
| |
- Refactor logic that creates ElementRegions into a help method 'MakeElementRegion'.
- Fix crash due to not handling StringRegions. Casts of StringRegions now
result in a new ElementRegion layered on the original StringRegion.
llvm-svn: 74867
|
| |
|
|
|
|
| |
using '-analyzer-store=basic-new-cast'.
llvm-svn: 74865
|
| |
|
|
|
|
|
| |
- Have test for 'CodeTextRegion' dominate other region tests.
- Use 'getAsRecordType' instead of isa<RecordType>
llvm-svn: 74853
|
| |
|
|
| |
llvm-svn: 74852
|
| |
|
|
|
|
|
| |
(its superclass). This will allow us to experiment with using the new CastRegion
with BasicStoreManager, and gradually phase out the old implementation.
llvm-svn: 74851
|
| |
|
|
|
|
| |
if the return type on an Objective-C method is a CF type reference, not just an Objective-C object reference.
llvm-svn: 74841
|
| |
|
|
| |
llvm-svn: 74816
|
| |
|
|
|
|
| |
No functionality change.
llvm-svn: 74812
|
| |
|
|
| |
llvm-svn: 74762
|
| |
|
|
| |
llvm-svn: 74751
|
| |
|
|
|
|
| |
variable can be symbolicated.
llvm-svn: 74750
|
| |
|
|
|
|
|
|
|
| |
ValueManager::getRegionValueSymbolVal() with unguarded calls to
ValueManager::getRegionValueSymbolValOrUnknown(). This changes centralizes the
decision of what values to symbolicate in SymbolManager rather than having it
scatter in RegionStoreManager.
llvm-svn: 74730
|
| |
|
|
|
|
| |
structures passed-by-value as function arguments.
llvm-svn: 74729
|
| |
|
|
|
|
|
| |
directly consulting if a VarDecl is an implicit or actual parameter, a global,
etc.
llvm-svn: 74716
|
| |
|
|
|
|
|
| |
This will simplify the logic of StoreManagers that want to specially reason
about the values of parameters.
llvm-svn: 74715
|
| |
|
|
| |
llvm-svn: 74709
|
| |
|
|
|
|
| |
actual lifetime to their logical lifetime.
llvm-svn: 74665
|
| |
|
|
|
|
|
|
| |
pass misc-ps.m. Currently RegionStore/BasicStore don't do any special reasoning
about clang-style vectors, so we should return UnknownVal (in all cases) when
accessing their values via an array.
llvm-svn: 74660
|
| |
|
|
| |
llvm-svn: 74581
|