[cfe-commits] r73851 - in /cfe/trunk: lib/Analysis/RegionStore.cpp test/Analysis/fields.c

Zhongxing Xu xuzhongxing at gmail.com
Sun Jun 21 06:24:27 PDT 2009


Author: zhongxingxu
Date: Sun Jun 21 08:24:24 2009
New Revision: 73851

URL: http://llvm.org/viewvc/llvm-project?rev=73851&view=rev
Log:
Return UnknownVal for pointer arithmetic on struct fields.

Modified:
    cfe/trunk/lib/Analysis/RegionStore.cpp
    cfe/trunk/test/Analysis/fields.c

Modified: cfe/trunk/lib/Analysis/RegionStore.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/RegionStore.cpp?rev=73851&r1=73850&r2=73851&view=diff

==============================================================================
--- cfe/trunk/lib/Analysis/RegionStore.cpp (original)
+++ cfe/trunk/lib/Analysis/RegionStore.cpp Sun Jun 21 08:24:24 2009
@@ -773,8 +773,13 @@
     SVal ZeroIdx = ValMgr.makeZeroArrayIndex();
     ER = MRMgr.getElementRegion(EleTy, ZeroIdx, AR, getContext());
   } 
-  else
+  else if (isa<FieldRegion>(MR)) {
+    // Not track pointer arithmetic on struct fields.
+    return UnknownVal();
+  }
+  else {
     ER = cast<ElementRegion>(MR);
+  }
 
   SVal Idx = ER->getIndex();
 

Modified: cfe/trunk/test/Analysis/fields.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/fields.c?rev=73851&r1=73850&r2=73851&view=diff

==============================================================================
--- cfe/trunk/test/Analysis/fields.c (original)
+++ cfe/trunk/test/Analysis/fields.c Sun Jun 21 08:24:24 2009
@@ -8,3 +8,12 @@
   *(unsigned*)&y = foo();
   y.x = 1;
 }
+
+struct s {
+  int n;
+};
+
+void f() {
+  struct s a;
+  int *p = &(a.n) + 1;
+}





More information about the cfe-commits mailing list