warn-on-write-after-write
.auto-generate-stubs
is used.__ASTREE_partition_ranges((e:a1,...,an))
allows partitioning an expression e
according to a list of intervals a1,...,an
.
The alternative syntax __ASTREE_partition_ranges((e1;min_size=e2;max_partition=n))
automatically generates partitions covering the range of the expression
e1
using the minimal size specified by e2
and/or the maximum number of partitions n
.The detection of shared variables has been improved
so that it is now possible to have two tasks using the same
entry function. This brings about a modification of the
__ASTREE_asynchronous
loop directive, which now
requires all tasks to be listed explicitly. Hence, analysis
wrappers of the following form are no longer valid:
typedef void(*t)(void); static t tasks[] = { t1, t2 }; unsigned int idx; __ASTREE_known_fact(( idx < 2 )); __ASTREE_asynchronous_loop(( tasks[idx]() ));
The correct way for re-writing the above analysis wrapper example is:
__ASTREE_asynchronous_loop(( t1, t2 ));
The wrapper generator in the GUI has been modified accordingly.
__ASTREE_partition_control
statements before assignments.auto-generate-stubs=yes
.Improved the precision of the analyzer on barycentric computations of the following form:
in1 = [-1.1]; in2 = [-1,1]; while (1) { b = [0,1]; out = b * in1 + (1 - b) * in2; if (*) in1 = out; if (*) in2 = out; }
Astrée now issues an alarm when an expression may write to a string literal in which case the behavior is undefined and the program may even crash. Here is an example:
char *s = "Sky"; s[0] = 's';
The result of Astrée:
ALARM (A): write to constant: writing to string literal "Sky".
Definite runtime error during assignment in this context.
Analysis stopped for this context.
cut-invalid-pointer
has been removed.dump-hypotheses=[yes|no]
controls whether the analyzer
output contains additional sections that list all semantic hypotheses and
further directives. It is provided so that the size of the analyzer output
can be reduced when running analyses with very large numbers of directives.
However, it is recommended to leave the option enabled so that the result
documents the semantic hypotheses on which the correctness of the analysis
result relies.OR
operator.static-initialization=no
and global-initialization=yes
,
the non-static global variables will now be initialized to 0
.