summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/array-struct-region.cpp
Commit message (Collapse)AuthorAgeFilesLines
* [analyzer] Fix bad test from r163220.Jordan Rose2012-09-051-0/+6
| | | | | | Add a FIXME to the test while I track down the real problem. llvm-svn: 163222
* [analyzer] Be more forgiving about calling methods on struct rvalues.Jordan Rose2012-09-051-0/+87
| | | | | | | | | | | | | | | | | | | | The problem is that the value of 'this' in a C++ member function call should always be a region (or NULL). However, if the object is an rvalue, it has no associated region (only a conjured symbol or LazyCompoundVal). For now, we handle this in two ways: 1) Actually respect MaterializeTemporaryExpr. Before, it was relying on CXXConstructExpr to create temporary regions for all struct values. Now it just does the right thing: if the value is not in a temporary region, create one. 2) Have CallEvent recognize the case where its 'this' pointer is a non-region, and just return UnknownVal to keep from confusing clients. The long-term problem is being tracked internally in <rdar://problem/12137950>, but this makes many test cases pass. llvm-svn: 163220
* Revert "[analyzer] Treat all struct values as regions (even rvalues)."Jordan Rose2012-09-051-87/+0
| | | | | | | | | | | | | | This turned out to have many implications, but what eventually seemed to make it unworkable was the fact that we can get struct values (as LazyCompoundVals) from other places besides return-by-value function calls; that is, we weren't actually able to "treat all struct values as regions" consistently across the entire analyzer core. Hopefully we'll be able to come up with an alternate solution soon. This reverts r163066 / 02df4f0aef142f00d4637cd851e54da2a123ca8e. llvm-svn: 163218
* [analyzer] Treat all struct values as regions (even rvalues).Jordan Rose2012-09-011-0/+87
This allows us to correctly symbolicate the fields of structs returned by value, as well as get the proper 'this' value for when methods are called on structs returned by value. This does require a moderately ugly hack in the StoreManager: if we assign a "struct value" to a struct region, that now appears as a Loc value being bound to a region of struct type. We handle this by simply "dereferencing" the struct value region, which should create a LazyCompoundVal. This should fix recent crashes analyzing LLVM and on our internal buildbot. <rdar://problem/12137950> llvm-svn: 163066
OpenPOWER on IntegriCloud