Changes between Version 41 and Version 42 of IR


Ignore:
Timestamp:
11/23/15 17:42:42 (10 years ago)
Author:
zmanchun
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IR

    v41 v42  
    140140* `$pure` : the function has no side effects, but may be nondeterministic
    141141* `$abstract`: function is a pure, mathematical function: deterministic function of inputs
    142 * `$atomic_f`: function definition is atomic, and there is it is never blocked
     142* `$atomic_f`: function definition is atomic, and it never blocks
    143143
    144144System functions:
     
    204204* `e1&e2`, `e1|e2`, `e1^e2`, `~e1` : bit-wise operations: arguments are arrays of booleans
    205205* **Memory set expressions**: are these literal values of type `$mem`?
    206  * could we use Frama-C notation `p+(e1..e2)` for example?
    207  * are there conversions between pointers and mems?
    208 
     206 * a left-hand-side expression, when used in certain contexts, is automatically converted to `$mem`.  The contexts are: arguments to the built-in functions `$access`, `$read`, and `$write` described below, or occurrence in the list of an `$assigns` clause
     207 * `a[dom]`, where `a` is an expression of array type and `dom` is an expression of `$domain` type.   The dimension of the array must match the dimension of the domain.   This represents all memory units which are the cells in the array indexed by a tuple in `dom`.
     208 * `$region(ptr)`, where `ptr` is an expression with a pointer type.  This represents the set of all memory units reachable from `ptr`, including the memory unit pointed to by `ptr` itself.
     209 * `mem1+mem2`, where `mem1` and `mem2` are expressions of type `$memory`.  This is the union of the two sets.  **Problem this is ambiguous with numeric +, as in x+y.**
     210 * **could we use Frama-C notation `p+(e1..e2)` for example?**
     211 * **are there conversions between pointers and mems?**
    209212
    210213Pointers: unlike C, there is no "array-pointer pun".   If an array `a` needs to be converted to a pointer, you must use `&a[0]`.