Improved side bar |
Improved result views |
Program slicer |
.aaf
file.separate-function
is used in an analysis with multiple asynchronous tasks.gauges=yes
.
Additionally, it provides notifications about loops for which no upper
loop bound can be derived.NaN
and infinities when
the option keep-float-specials
is set.offsetof(struct S, arr[5][4].b)
.x = f()
.__ASTREE_absolute_address((int, 0x1000)); enum { ADDR = 0x1000, }; ... *(int*)ADDR = 42;
_Bool
is now supported.void f(i) int i; { ... }
int f(void) { return 19 + ({ int x = 23; x; }); }
((T*)s)->f
where T
is an unnamed struct type.struct S {} s = {};
Added a new entry function OSEK_sequential_main
to the OSEK stub library. This entry provides an automatic
sequentialized setup for OSEK projects using an OIL configuration.
It can be used to detect run-time errors that already occur without
interaction between the tasks.
When enabling the gauge domain, in rare cases the analyzer may underestimate the value ranges of certain variables. Make sure that the gauge domain is disabled (this is the default setting of the analyzer), or contact support@absint.com for details on scenarios that trigger the undesired behavior.
The side bar has improved in a number of ways. The new Results section contains the new Findings view (see below). The new Project Summary area and the Preprocessed Files list provide more information than before. The traffic lights are now displayed horizontally to save space.
tooltips=no
.__ASTREE_assert((Y < 27));
will raise the following message if the analyzer cannot prove that the specified
condition always holds:
ALARM (A): assert failure __ASTREE_assert((Y < 27)) at ...
enum { A = 1/0 }
now raises the message
ALARM (A): division by zero
ALARM (C): signed long long integer constant ‘9999999999999999999’ not included in [-9223372036854775808, 9223372036854775807]
ALARM (C): floating-point constant ‘1.79769313488e+308’ not included in 64-bit floating-point range
--report-rulechecks <filename>
or specified in DAX by the element <xml-rulechecks>
.<coverage>
section now also contains reachability information per function--report-dataFlowFunctions <filename>
--report-dataFlowVariables <filename>
--report-dataFlowProcesses <filename>
--report-metricsLocation <filename>
--report-metricsType <filename>
Name Description Revision Alarms Division by zero ... my_analysis first 1 2 1 ... my_analysis second 2 49 12 ...
Astrée now only displays the number of program locations for which alarm and error messages are reported. It no longer displays the number of messages themselves, which can differ from the number of locations (e.g. if analyzing a program location in different call contexts always leads to the same runtime error).
The information about the number of messages has been removed from the Project Summary in the GUI, the XML report, and the XTC result file. This simplification makes the results easier to understand. The omitted information is typically irrelevant in practice.
/* Reached functions */ | ------------------------------------------------------------------------ | | | Number of statements | | | Reached functions (5/9) | total | reached | not reached | percent | | ------------------------------------------------------------------------ | | strcpy_x | 5 | 5 | 0 | 100 % | at strcpy_x.c:66.0-72.1 | strcmp_x | 7 | 6 | 1 | 85 % | at strcmp_x.c:66.0-72.1 | malloc_x | 3 | 3 | 0 | 100 % | at malloc_x.c:66.0-72.1 | main | 4 | 4 | 0 | 100 % | at main.c:85.0-91.1 | Proc8 | 14 | 14 | 0 | 100 % | at Proc8.c:66.0-82.1 | ------------------------------------------------------------------------ | /* Not reached functions */ | ------------------------------------------------------------------------ | | | Number of statements | | | Not reached functions (3/9) | total | reached | not reached | percent | | ------------------------------------------------------------------------ | | memcpy_x | 3 | 0 | 3 | 0 % | at memcpy_x.c:67.0-72.1 | Proc3 | 6 | 0 | 6 | 0 % | at Proc3.c:66.0-77.1 | Proc1 | 13 | 0 | 13 | 0 % | at Proc1.c:66.0-88.1 | ------------------------------------------------------------------------ | /* Stubbed functions */ | ------------------------------------------------------------------------ | | | Number of statements | | | Stubbed functions (1/9) | total | reached | not reached | percent | | ------------------------------------------------------------------------ | | Func1 | 4 | 4 | 0 | 100 % | at strcpy_x.c:51.12-17 | ------------------------------------------------------------------------ |
rulechecks
has been removed. Instead the Rule Checker
is automatically enabled if the set of rules to check for
is not empty. The computation of code metrics can now
be enabled independently from rule checking using the new option
metrics=yes
.--report-rulechecks <filename>
or specified in DAX by the element <xml-rulechecks>
.allow-boolean-constants=yes
, the Rule Checker
allows 0
and 1
constants to be used in boolean contexts.
Code like bool_t b = 1;
then passes without violation of the MISRA-C:2004
rule 10.1 or the MISRA-C:2012 rule 10.3.!
operator is now always Boolean.external-file-spreading
for rule 8.8 related to tentative definitions.allow-signed-constant-with-signed=[yes|no]
controls whether the essential type model is relaxed, such that constant
expressions of essentially signed type and non-negative value that
are subject to the usual arithmetic conversions (see ISO/IEC 9899:1999 §6.3.1.8)
are considered unsigned, if the other operand is essentially unsigned.external-file-spreading
for rule 8.5 related to tentative definitions.The ABI specification has been restructured. An example DAX specification is:
<abi import="@ia32.dax" target="my custom abi"> <char_sign>signed</char_sign> </abi>
The base ABI is imported from the file specified in the import
attribute. Any modifications, such as the different value for char_sign
in the example above, are listed explicitly. In addition,
the target
attribute can be used to specify a name for the ABI.
The base ABI can be imported from any DAX file, not only from the
predefined ABIs shipped with the tool. A predefined ABI can be
referenced either by its absolute path or by its file name
prefixed with an @
, as in the example above, to make
the specification installation-independent.
The file referenced by the import
attribute must not itself reference another ABI.
The <original-sources>
section has been removed.
Original source files that shall not be preprocessed by Astrée
must now be listed in a <preprocess>
section
that includes <use-internal-preprocessor>no</use-internal-preprocessor>.
Included header files are then retrieved automatically and don’t need
to be listed. The <replacements>
and
<strip-compilation-path>
tags
from the <original-sources>
section of previous
DAX versions are now available within the <preprocess>
section.
The <strip-compilation-path>
tag has been renamed to <strip-path>
.
<private>yes</private>
for marking analysis projects as private. When importing a DAX file that uses this tag,
the resulting analysis project is marked as private for the user who imported the analysis.
Note that this tag must be removed before loading a DAX specification as user
anonymous
.<pragma-asm>yes</pragma-asm>
to the DAX file if filtering of code blocks enclosed by
#pragma asm
and #pragma endasm
was enabled.<entry>
has been replaced by
<options> <analysis-entry>function_name</analysis-entry> </options>
<options> <config-file>filename</config-file> </options>
The specified file must also be added to the <files>
list.
exclude-signed-in-unsigned-overflows=yes
, exclude-signed-negation-overflows-in-cto=yes
).<automatic-includes> <automatic-include>string</automatic-include> ... </automatic-includes>
warn-on-fullrange
dump-process-dataflow
dataflow=yes
is enabled.chrono
export-disambiguate
-u
and --files
dataflow
auto-generate-stubs
case-insensitive
__ASTREE_initialize((v))
now has an effect when
v
is an array or a structure. It initializes
the whole array (or structure), and in addition
removes NaN
and infinities from floating point values
when using the option keep-float-specials=no
.__ASTREE_modify((v; full_range))
now also sets
v
to be initialized when it is an array or a structure.
In such cases, it doesn’t add NaN
and infinities
anymore when using the option keep-float-specials=no
.__ASTREE_import(())
directive.The synchronous execution model of Astrée supports
an upper bound for the effectively maximal iteration count
of infinite loops, to be used for the cyclic executive loop.
The bound becomes effective when using
the directive __ASTREE_wait_for_clock(())
.
In previous releases, the analysis entry functions
generated by the wrapper generator and the TargetLink
importer made use of __ASTREE_wait_for_clock(())
to bound the maximum execution steps of the generated
main loop. For the sake of clarity this default has been changed
so that no upper bound for the maximum number
of execution steps is implicitly assumed.
Both the wrapper
generator and the TargetLink importer provide a new option
so that users can explicitly activate a maximum loop bound with
a user-specified value. The bounds can also be specified
via DAX by the new <max-clock>
tag inside
the <wrapper>
or <data-dictionary>
tag.
/* ASTREE_suppress(0, , rules-category) */
__astree_create_process
accepts
a name as optional last argument. That name is printed
in the output window and in the call graph
and data flow view when referring to that process.anonymous
has been disabled by the server administrator.--user username@password
can now
be stored by using the new option --remember-password
.
Subsequent connections, whether in batch mode or via the GUI, then
automatically re-use the stored authentication information
unless different information is explicitly provided.ignored-source-files
).-DFOO=bar
) in the original-sources parser used for rule checking.__ASTREE_max_clock
directive.partition-array-access
heuristic to reduce
the memory consumption and analysis time on certain code.__ASTREE_comment
directives that specify the type of alarm
to comment on now only affect alarm messages for exactly the specified
code range. __ASTREE_comment
directives without an alarm type
behave as before, affecting all alarm messages anywhere within the specified
code range. This modification enables precise commenting on nested alarms
of the same type in the Findings view.comment_kind
attribute for commented alarm messages rather
than undecided
.if (...) x = 1.; else x = -1.; y = x == 0.;This issue has now been fixed. In older versions of release 16.04, it can be worked around by using the option
float-distance-to-zero=no
.N
in the generated annotation was off by one.--preprocess-report-file <file>
for writing a plain text file that contains the preprocessor output as displayed
in the Preprocess view. The option is particularly useful for observing
the progress of the preprocessing phase in batch mode.indentation-level
rule check is now run
before parser filters on original code. This fixes the customer-specific
rule X.A.4.8 in the presence of parser filters applied to line beginnings.cast-implicit
to not warn about implicit
casts on pointers that only concern type qualifiers. The check is used
in customer-specific rule X.A.5.44.Fixed false alarm about customer-specific rule X.A.4.8 that was raised for a multi-line comment when the last non-newline character before the comment was a slash.