]> granicus.if.org Git - clang/commitdiff
For now, return UnknownVal() in RegionStore::getElementsSize() for AnonTypedRegions...
authorTed Kremenek <kremenek@apple.com>
Thu, 22 Jan 2009 23:56:56 +0000 (23:56 +0000)
committerTed Kremenek <kremenek@apple.com>
Thu, 22 Jan 2009 23:56:56 +0000 (23:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62816 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/RegionStore.cpp
test/Analysis/NoReturn.m
test/Analysis/rdar-6442306-1.m

index ec801d47f28a47203ddae00ad7b8672dc0108848..48c11f3bbf1bef373d62f129b27db3d70e03d00d 100644 (file)
@@ -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)) {
index 16870f8aa10159bda15b0f687e25efb2fe6e328b..2d3bd7c81e0703319816adbad0d1364e56c7f0d4 100644 (file)
@@ -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>
 
index ea8d9baf6e65265bd7165dcee66ce2ea05aae705..b3235d9c40d3bb8872f9c7421f5415986f2049e1 100644 (file)
@@ -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 {