An Eclipse plugin for Astrée and RuleChecker is now available and included in the installation package.
Astrée is now more precise when analyzing interpolation functions, in particular code generated by the TargetLink code generator for Matlab.
#pragma once
.#include_next
, __has_include()
, and __has_include_next()
.inc.folder/header
no longer cause errors._Generic
in initializers for objects of static storage duration_Alignof(void)
as a C language extension, supported by various compilers;
the result of this expression is 1
__attribute__((weak))
for weak linkage of identifiers$
character as part of identifiers (C language extension)sizeof
to unions that contain structs with flexible array members(a ? b : c)
where b
is a pointer and c
the null pointer constant (void*)0
.asm
is now considered to be a keyword, and is handled like __asm
.enum
type are now longer rejected if not all elements of the enum
are within the range of the resulting bit-field.bitfield_sign
.
The new behavior corresponds to the behavior of common compilers, like GCC and Clang. Please also
see release notes for the new diagnostic rule A.3.3.dev-geo
).
Dependency cycles are now detected through more cases of function
pointer calls, thus increasing the precision of the analysis in cases like the following:
void g(void); typedef void (*fptr)(void); void main(void) { fptr f; while(1) { f = g; (*f)(); /* dev-geo can now improve precision on code called through f */ } }
When evaluating initializers for objects with static storage duration,
Astrée now uses the ABI option rounding_mode_for_constants
instead of rounding_mode
.
gauges=yes
).warn-on-signed-integer-lshift-ranges
enables
alarms about left shifts of negative values. The option is disabled by default.log-iter
now takes an integer value that specifies
after how many up iterations the analyzer starts logging the fixed-point
iteration of a loop. The default value is 10
, and the value -1
disables logging.separate-analysis=*
)
in case of multiple asynchronous processes. The heuristic now computes a different set of “separate functions”
for each process, which generally improves analyzer performance.automatic-partition
no longer partitions division operations.--report-file
and --xml-report-file
file
are no longer restricted to batch mode execution. They are now also accepted in GUI mode.-u
and --files <files>
have now been removed.__ASTREE_partition_begin
directive on a variable
with too many possible values.RULECHECKER_comment
allows commenting rule violations
at arbitrary code locations. The GUI automatically generates AAL annotations with such directives
when commenting alarms in the Findings view. Thus, users can now comment all findings of the tool
directly from the Findings view.__ASTREE_annotation(( OTHER=STRANGE; STRANGE=THING; ANY=x; SOME=y; THING=b; main { -1 statement} insert before : __ASTREE_log_vars((ANY.OTHER)); main { -1 statement} insert before : __ASTREE_log_vars((SOME.THING)); ));generates the following directives:
__ASTREE_log_vars((x.b); __ASTREE_log_vars((y.b);
modify
and initialize
directives.
The directives
__ASTREE_initialize((expr)); __ASTREE_modify((expr; initialize)); __ASTREE_modify((expr; full_range));now behave exactly like
__ASTREE_modify((expr)); __ASTREE_modify((expr; [lo, hi]));in case that the evaluation of expr has no valid result. The analyzer raises an error and continues the analysis ignoring the invalid effects of the directive.
__ASTREE_global_assert
directive:
__ASTREE_global_assert
and in an __ASTREE_smash_variables
directive, the analyzer now ignores
one of the directives and reports a violation of the diagnostic rule A.5.1.
Moreover, it now prevents dynamic smashing of globally asserted variables.__ASTREE_global_assert
now
also keeps track of modifications via byte-level directives, such as
__ASTREE_bzero
or __ASTREE_trash
, and type punning.
The analyzer will now also raise an alarm if a globally asserted variable
is modified through a call to __ASTREE_modify
.goto
.[lo-hi]
for array slices (e.g. in __ASTREE_modify
)
now triggers an error instead of just a notification. These errors can be removed
by rewriting such expressions using the new [lo..hi]
syntax.__ASTREE_alarm
, __ASTREE_comment
, and __ASTREE_suppress
directives if the specified alarm type is invalid.log-time
option in the analyzer log and text report file.
The timing statistics for each function are now printed in the same tabular form that is used for
reporting reachable/unreachable/stubbed functions.Added support for 33 more rules:
array-argument-to-pointer-decay
for rule M2008.5.2.12.
It failed to warn about arguments decaying to pointers if the corresponding
parameters of the called function were declared const
.integral-type-name
(rule M2008.3.9.2)
no longer warns about bit-fields.non-standard-identifier
(M.1.1 and M2012.1.2)
warns about the declaration/definition of identifiers that contain a $
character.undeclared-parameter
,
introduced for the new diagnostic rule A.1.10,
is now also associated with the rules M.1.1, M.8.2,
M2012.1.1, and M2012.8.1.#include_next
, __has_include()
, and __has_include_next()
.
Checks for the rules M.1.1 and M2012.1.2
have been extended accordingly.evaluation-order
and evaluation-order-initializer
no longer produce false alarms
for array look-ups in which the index expression is a function call, as in
a[f()]
.
This affects rule M.12.2 and M2012.13.2.return-implicit
to remove false alarms
for rule M.16.8 and M2012.17.4.controlling-invariant
(rule M2012.14.3)
and boolean-invariant
(rule M.13.7)
now also warn about invariant expressions when there is control flow
by break
, continue
or goto
circumventing the expression.integral-type-name
(rule M.6.3 and M2012.D.4.6)
no longer warns about bit-fields.external-redeclaration
for rule M2012.8.5
no longer warns about declarations
if only their column offsets in preprocessed code differ.expression-statement-dead
(rule M2012.2.2)
now also warns if the increment part of a for-loop is dead._Alignof
applied to void.essential-arithmetic-conversion
(rule M2012.10.4)
is no longer triggered by a ternary operator with a null pointer constant as second or third
operand and a pointer as the other operand.parameter-missing-const
no longer causes false alarms
for rule M.16.7 and M2012.8.13.pointered-deallocation
Added support for 28 more rules:
evaluation-order
and evaluation-order-initializer
no longer produce false alarms
for array look-ups in which the index expression is a function call, as in
a[f()]
.
This affects rule CERT.EXP.10 and CERT.EXP.30.return-implicit
to remove false alarms
for rule CERT.MSC.37.undeclared-parameter
,
introduced for the new diagnostic rule A.1.10,
is now also associated with the rule CERT.DCL.31.parameter-missing-const
to remove false alarms
about violations of rule CERT.DCL.0 and CERT.DCL.13.expression-statement-dead
(rule CWE.561)
now also warns if the increment part of a for-loop is dead.int f(v) { return 0; } /* parameter v is not declared */
non-standard-identifier
(rule
A.2.12) warns about the declaration/definition
of identifiers that contain a $
character.sizeof
or _Alignof
applied to void
.__attribute__
,
in particular to notify about __attribute(weak)
, which is a newly supported language extension.unsupported-language-feature-fatal
) warns about
the use of language features that are not supported by Astrée and may cause the analyzer
to terminate with an error.#include_next
, __has_include()
, and __has_include_next()
.
Checks for the rules M.1.1 and M2012.1.2
have been extended accordingly.evaluation-order
and evaluation-order-initializer
no longer produce false alarms
for array look-ups in which the index expression is a function call, as in
a[f()]
.
This affects rule A.4.1 and A.4.2.type-abbreviations
into account.%plaintype%
, %Plaintype%
and %PLAINTYPE%
which represent the type abbreviation of the named object without recursive
expansion by pointee type (in contrast to %Type%
).integral-type-name
and integral-type-name-extended
for rule X.A.5.6 no longer warn about bit-fields.uninitialized-local-read
.pointer-qualifier-cast | ↗ ↘ | pointer-qualifier-cast-const pointer-qualifier-cast-volatile |
pointer-qualifier-cast-implicit | ↗ ↘ | pointer-qualifier-cast-const-implicit pointer-qualifier-cast-volatile-implicit |
directive-syntax | ↗ → ↘ | directive-syntax extra-tokens non-directive |
recursion
and uninitialized-local-read
.osek.h
header file of the OSEK stub library
can now be extended by defining the macro _OSEK_H_PRE_INCLUDE
in preprocessor configurations:
<defines> <define>_OSEK_H_PRE_INCLUDE="${A3_GLOBAL_BASE_DIR}/my_osek_vendor_extensions.h"</define> </defines>
strcmp
and strncmp
and checks argument pointers
that are not explicitly used otherwise. In case of such a pointer being
NULL
or invalid, the analyzer raises an alarm at the program point
where the stub is invoked.UINT_MAX
, ULONG_MAX
,
and ULLONG_MAX
are now defined as unsigned.Added support for new built-in functions of CompCert for 32/64-bit hybrid PowerPC introduced in CompCert release 18.10.
$A3_GLOBAL_BASE_DIR
and $A3_BASE_DIR
can be used in preprocessor configurations to refer to the global base directory of the analysis,
or the base directory of a preprocessor configuration, respectively.The built-in program slicer now supports context sensitive slicing for tasks of concurrent programs.
InvokeRuleChecker()
.
The second argument to InvokeAstree()
which was previously used to choose between Astrée and RuleChecker is now deprecated./datadir='dir'
for configuring the server data directory.*** Project name: Scenarios *** Description: Standard example *** Id: 1016452227 *** Revision: 1
qk_aal_identifier_substitution
qk_alarm_negative_lshift_argument
qk_option_warn_on_signed_integer_lshift_ranges
qk_check_non_standard_escape_sequence
qk_check_non_standard_identifier
qk_check_undeclared_parameter
qk_check_attribute
qk_rule_a_2_11
,
qk_rule_a_2_12
,
qk_rule_a_2_13
,
qk_rule_a_2_14
,
qk_rule_a_2_15
,
qk_rule_a_2_16
,
qk_rule_a_3_3
,
qk_rule_a_5_3
qk_check_recursion
qk_check_stdlib_limits
qk_check_alignof_void
, qk_check_sizeof_void
qk_check_has_include
, qk_check_has_include_next
, qk_check_include_next
qk_aal_insert_source_comment
qk_directive_comment_source_external
qk_check_unsupported_language_feature_fatal