diff options
| author | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-04-01 03:23:38 +0000 |
|---|---|---|
| committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-04-01 03:23:38 +0000 |
| commit | c473a4450795f295ef5c4d46d38e8c50e6e56ac0 (patch) | |
| tree | 28a5a507a838c84300d2cb238b432efadd8487a6 | |
| parent | ae8bca038db7019a16e2f0c7bdff01ab9cb4c511 (diff) | |
| download | bcm5719-llvm-c473a4450795f295ef5c4d46d38e8c50e6e56ac0.tar.gz bcm5719-llvm-c473a4450795f295ef5c4d46d38e8c50e6e56ac0.zip | |
Update docs.
llvm-svn: 68183
| -rw-r--r-- | clang/docs/AnalyzerRegions.txt | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/docs/AnalyzerRegions.txt b/clang/docs/AnalyzerRegions.txt index d2177ec1607..af36c3be84c 100644 --- a/clang/docs/AnalyzerRegions.txt +++ b/clang/docs/AnalyzerRegions.txt @@ -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. |

