Changes between Version 1 and Version 2 of PointsToAnalysis


Ignore:
Timestamp:
02/15/16 14:46:41 (10 years ago)
Author:
zmanchun
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • PointsToAnalysis

    v1 v2  
    66* aggregate modeling: elements of struct/array are distinguished
    77
     8=== Definitions ===
     9* `obj(p)`: the set of objects that `p` may reference to;
     10* `obj(e)`: the set of objects that `e` may represent, where `e` has pointer type, or composite type of pointer type (e.g., array of pointers);
     11
     12* `Conditional Object Set` of a pointer `p`:
     13 * `cobj(p)={c0->O0, c1->O1, c2->O2, ...}` where `O1, O2, ...` are all set of objects
     14 * `c0->O0` denotes that when `c0` is satisfied the objects set that p could refer to is `O0`
    815
    916
     17==== Expressions ====
     18let `e` be an expression, let `le` be an left-hand-side expression, let `impact(e)` be the set of impact memory units of `e`.
     19let`mu(e)` be a function to convert an expression, of pointer type or being a left-hand-side expression, to a memory unit.
     20
     211. abstract function call: `f(e0,e1, ...)`
     22    **???**
     232. address-of: `&le`
     24    `obj(&le)={le}`
     253. array literal: `{e0, e1, ...}` where `e0`, .. `e1` all have pointer types
     26    `obj({e0, e1, ...}) = obj(e0) U obj(e1) ...`
     274. pointer addition: `e0 + e1`
     28    `obj(e0 + e1) = offset(e0, e1)`
     295. cast expression: `(T)e` (where `T` is pointer type)
     30    `obj((T)e)=obj(e)`
     316. conditional expression: `e0 ? e1 : e2`
     32    `obj(e0 ? e1 : e2) = e0 ? obj(e1) : obj(e2)`
     337. dereference expression: `*e` where `e` has type pointer-to-pointer of `T`
     34    `obj(*e) = **???**`
     35    the impact memory units of `*e` include the memory unit refers to by `e`, and the impact memory units of the sub-expressions of `e`.
     36    e.g., the impact memory units of `*(p+i)` is `{mu(p+5), impact(i)}`, because `p` is of pointer type and `sub(p+i)` is `{i}`.
     378. dot expression: `e.k` where `e.k` has pointer type
     38      `obj(e.k) = {e.k}`
     399. subscript expression: `ea[ei]`
     40      `obj(ea[ei])={ea[ei]}`
     41
     42==== Sub-expressions ====
     43let `e` be an expression, let `sub(e)` be the set of sub-expressions of `e`.
     44
     451. abstract function call: `f(e0,e1, ...)`
     46    `sub(f(e0,e1, ...)) = {e0, e1, ...}`
     472. address-of: `&le`
     48    `sub(&le)={le} U sub(le)`
     493. array literal: `{e0, e1, ...}`
     50    `sub({e0, e1, ...}) = {e0, e1, ...}``
     51 4. binary expression: `e0 op e1`
     52    `sub(e0 op e1) = e0.type== pointer ? {e1} : {e0, e1}`
     535. bound variable expression: `eb`
     54    `sub(eb)=\empty`
     556. cast expression: `(T)e`
     56    `sub((T)e)={e}`
     57
     58
     59
     60
     61
     62