From: Ted Kremenek Date: Thu, 22 Jan 2009 23:56:56 +0000 (+0000) Subject: For now, return UnknownVal() in RegionStore::getElementsSize() for AnonTypedRegions... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2e84257c699cd8e98462021b4848e76967ac831d;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62816 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/RegionStore.cpp b/lib/Analysis/RegionStore.cpp index ec801d47f2..48c11f3bbf 100644 --- a/lib/Analysis/RegionStore.cpp +++ b/lib/Analysis/RegionStore.cpp @@ -420,6 +420,12 @@ SVal RegionStoreManager::getSizeInElements(const GRState* St, } if (const AnonTypedRegion* ATR = dyn_cast(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(R)) { diff --git a/test/Analysis/NoReturn.m b/test/Analysis/NoReturn.m index 16870f8aa1..2d3bd7c81e 100644 --- a/test/Analysis/NoReturn.m +++ b/test/Analysis/NoReturn.m @@ -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 diff --git a/test/Analysis/rdar-6442306-1.m b/test/Analysis/rdar-6442306-1.m index ea8d9baf6e..b3235d9c40 100644 --- a/test/Analysis/rdar-6442306-1.m +++ b/test/Analysis/rdar-6442306-1.m @@ -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 {