For now, return UnknownVal() in RegionStore::getElementsSize() for AnonTypedRegions. It wasn't really doing the right thing and was crashing on rdar-6442306-1.m. This fix causes all path-sensitive test cases to pass with RegionStore.
llvm-svn: 62816
This commit is contained in:
parent
34eab390b9
commit
2e1dfe25c5
|
@ -420,6 +420,12 @@ SVal RegionStoreManager::getSizeInElements(const GRState* St,
|
|||
}
|
||||
|
||||
if (const AnonTypedRegion* ATR = dyn_cast<AnonTypedRegion>(R)) {
|
||||
#if 0
|
||||
// FIXME: This logic doesn't really work, as we can have all sorts of
|
||||
// weird cases. For example, this crashes on test case 'rdar-6442306-1.m'.
|
||||
// The weird cases come in when arbitrary casting comes into play, violating
|
||||
// any type-safe programming.
|
||||
|
||||
GRStateRef state(St, StateMgr);
|
||||
|
||||
// Get the size of the super region in bytes.
|
||||
|
@ -450,6 +456,10 @@ SVal RegionStoreManager::getSizeInElements(const GRState* St,
|
|||
(SSize * getBasicVals().getValue(8, SSize.getBitWidth(), false)) / ESize;
|
||||
|
||||
return NonLoc::MakeVal(getBasicVals(), S);
|
||||
#else
|
||||
ATR = ATR;
|
||||
return UnknownVal();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (const FieldRegion* FR = dyn_cast<FieldRegion>(R)) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// RUN: clang -analyze -checker-simple -verify %s &&
|
||||
// RUN: clang -analyze -checker-cfref -verify %s
|
||||
// RUN: clang -analyze -checker-simple -analyzer-store-basic -verify %s &&
|
||||
// RUN: clang -analyze -checker-cfref -analyzer-store-basic -verify %s &&
|
||||
// RUN: clang -analyze -checker-cfref -analyzer-store-region -verify %s
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: clang -analyze -checker-cfref %s --analyzer-store-basic -verify
|
||||
// DISABLE: clang -analyze -checker-cfref %s --analyzer-store-region -verify
|
||||
// RUN: clang -analyze -checker-cfref %s --analyzer-store-basic -verify &&
|
||||
// RUN: clang -analyze -checker-cfref %s --analyzer-store-region -verify
|
||||
|
||||
typedef int bar_return_t;
|
||||
typedef struct {
|
||||
|
|
Loading…
Reference in New Issue