]> granicus.if.org Git - clang/commitdiff
Update docs.
authorZhongxing Xu <xuzhongxing@gmail.com>
Wed, 1 Apr 2009 03:23:38 +0000 (03:23 +0000)
committerZhongxing Xu <xuzhongxing@gmail.com>
Wed, 1 Apr 2009 03:23:38 +0000 (03:23 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68183 91177308-0d34-0410-b5e6-96231b3b80d8

docs/AnalyzerRegions.txt

index d2177ec1607ec68faaf983f3b340fff51f6da828..af36c3be84cd259413757179c18e29e6cd5ae786 100644 (file)
@@ -70,6 +70,30 @@ MEMORY REGIONS and REGION TAXONOMY
   NOTE: We plan not to use loc::SymbolVal in RegionStore and remove it
   gradually.
 
+  Symbolic regions get their rvalue types through the following ways:
+  * through the parameter or global variable that points to it, e.g.:
+
+    void f(struct s* p) {
+      ...
+    }
+
+    The symbolic region pointed to by 'p' has type 'struct s'.
+
+  * through explicit or implicit casts, e.g.:
+    void f(void* p) {
+      struct s* q = (struct s*) p;
+      ...
+    }
+
+  We attach the type information to the symbolic region lazily. For the first
+  case above, we create the TypedViewRegion only when the pointer is actually
+  used to access the pointee memory object, that is when the element or field
+  region is created. For the cast case, the TypedViewRegion is created when
+  visiting the CastExpr.
+
+  The reason for doing lazy typing is that symbolic regions are sometimes only
+  used to do location comparison.
+
 Pointer Casts
 
 Pointer casts allow people to impose different 'views' onto a chunk of memory.