Changes between Version 19 and Version 20 of Language


Ignore:
Timestamp:
05/19/23 08:50:10 (3 years ago)
Author:
siegel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Language

    v19 v20  
    484484and returns an arbitrary integer in [0.''n''-1].  In verification mode, all possible choices are enumerated and explored.
    485485
    486 === `$default_value`
     486=== Initialization by default value: `$default_value`
    487487
    488488Assigns an object the default value of its type.  Signature:
     
    495495For example, 0 is the default value for a numeric type.
    496496
    497 === `$elaborate_domain`
     497=== Explicit elaboration of a domain: `$elaborate_domain`
    498498
    499499Forces explicit enumeration of the elements of a finite domain.  Signature
     
    503503In the concrete semantics, this is a no-op.
    504504
    505 === `$exit`
     505=== Process exit: `$exit`
    506506
    507507Terminates the calling process.  Signature:
     
    510510}}}
    511511
    512 === `$havoc`
     512=== Assignment of arbitrary value: `$havoc`
    513513
    514514Assigns an arbitrary value of the object's type to an object.  Signature:
     
    520520In the symbolic semantics, this function assigns a fresh symbolic constant of the appropriate type to the object pointed to by `ptr`.
    521521
    522 ===  Hiding pointers from the reachability analyzer: `$hide`, `$hidden`, and `$reveal`
    523 
    524 
     522===  Hiding pointers from the reachability analyzer: `$hide`, `$reveal`, and `$hidden`
     523
     524The partial order reduction algorithm used by the CIVL Model Checker computes the set of memory locations that a process ''p'' can reach.
     525This is an analysis performed at a state.
     526The starting point of this analysis is the set of variables in the dynamic scopes referenced from ''p'''s call stack, and the ancestors of those dyscopes.
     527There is an edge from one object to another if the first contains a pointer into the second.  All objects reachable from the initial objects in this directed
     528graph are the reachable objects of ''p''.
     529
     530There are times when one wants to modify this directed graph by ignoring some edge.   The purpose of these functions is to provide a way to do this from CIVL-C code.
     531The signatures are:
    525532{{{
    526533$abstract void* $hide(const void* ptr);
     534$system void* $reveal(const void* ptr);
    527535$system _Bool $hidden(const void* ptr);
    528 $system void* $reveal(const void* ptr);
    529 }}}
    530 
    531 === `$hide`
     536}}}
     537Function `$hide` wraps a pointer object in another object which is opaque to the reachability analyzer, i.e., the analyzer will not look inside this object and therefore will not find the hidden pointer.   Nothing can be done with this hidden pointer until it is "revealed", i.e., extracted from the opaque object.   The function `$hidden` tells whether its argument is a value returned by `$hide`.
    532538
    533539=== `$is_derefable`
     
    555561An error is generated if the pointer is not one that was returned by $malloc, or if it was already freed.
    556562
    557 === `$pathCondition`
     563=== Print the path condition: `$pathCondition`
    558564
    559565Prints the current effective path condition.
     
    569575}}}
    570576
    571 === `$reveal`
    572 
    573 === `$wait` and `$waitall`
    574 
    575 === `$yield`
    576 
     577=== Waiting for process termination: `$wait` and `$waitall`
     578
     579=== Yielding atomicity: `$yield`
    577580
    578581== Macros
    579582
    580 
    581 === `$elaborate`
    582 
    583 
    584 
     583=== Elaboration of integer value: `$elaborate`
    585584
    586585== Contract Annotations