Analysis results created with earlier releases cannot be displayed. When opening analyses from previous versions on the server or when importing them from AAF files, the results are discarded.
Note that configuration data is preserved, so that analyses can be repeated with the new version.
To preserve old analysis results, export analysis projects to AAF before upgrading the server and use the previous version for reviewing the results.
Introducing new features for specifying source components and tracking interactions between them:
ASTREE_attributes
with the new attribute component("X")
, where "X"
is the component’s name.
These attributes can also be set via the new action “Edit attributes…”
in the context menu of the original source files list.component-pairs-under-observation
allows highlighting
the interactions between two components in the data-flow and control-flow views and reports.taint-components
enables activation
of taint semantics to expose component dependencies.octagon
, automatic-octagon-packing
,
interproc-oct-packs
, max-oct-pack-size
,
fields-in-octagon-packs
, octagon-epsilon
,
print-packs
), as well as the directive __ASTREE_octagon_pack
.*&var
as var
.__ASTREE_octagon_pack
directives, using the extended
identifier syntax param_name@fun_name
.fields-in-octagon-packs
is now enabled by default.coverage-ignore
The coverage-ignore
feature now only uses
the directive ASTREE_attributes(coverage_ignore)
and produces consistent output in all views and report files.
To this end, the following aspects are no longer supported and have been removed:
<coverage-ignore>
coverage-ignore
in the files lists in the Preprocessor view<files>
tags in the XML reportPlease note that previous configurations cannot be converted automatically. DAX configurations can be converted manually by replacing DAX entries such as
<coverage-ignore> <file>preprocessed/some/path/to/file.c</file> </coverage-ignore>
by an AAL annotation
"file.c" insert comment: ASTREE_attributes(coverage_ignore);
which is equivalent to writing the comment /* ASTREE_attributes(coverage_ignore) */
into file.c
.
Note that file names in AAL are resolved by unique suffix.
Therefore, the path to the file can often be omitted.
The ALM now allows specifying a log file and log size. All connections to the server are then logged to the file in the JSON line format. After the specified log size is exceeded, the log file is rotated.
--log-file <file>
creates the log file, otherwise no log file is created--max-log-file-size <size>
specifies the maximum log size in MBc-version
to C18
).?:
are now marked as unreachable when the analyzer detects them to be unreachable.
This also affects the rule check unreachable-code
associated with the rules CERT.MSC.12,
CWE.561, M.14.1,
M2012.2.1, and X.A.5.22.__builtin_isfinite
,
__builtin_isinf
, and
__builtin_isnan
.__ASTREE_alarm((raise_at_caller; ...));
directives now produce
the exact same output as __ASTREE_alarm((raise_here; ...));
directives
that appear in a function with the attribute raise_at_caller
.dump-volatiles
prints all variables and fields
that are treated as truly volatile by Astrée.a[i-j]
or a[i+j]
when i-j
or i+j
, respectively, is known to be in range.__astree_memcpy
,
__astree_bzero
, and __ASTREE_access
changed to 2^61-2
.memcpy
or __astree_memcpy
definitely exceeds
the size of the target memory block, it now signals the issue as
definitely occurring and stops the analysis for the affected context.Astrée now discards partitioning directives when the partitioned expression or variable:
It is possible to make the analyzer report ignored directives by enabling the new diagnostic rule B.1.5.
__ASTREE_partition_ranges
directive
to generate more appropriate partitions for small floating point intervals.a * b / c
when the analyzer can infer that 0 <= b <= c
.annotations
, files
, options
,
parser-ignore
, preprocess
, and reports
.combine="(overwrite|merge)"
to the <config/>
tag. Overwriting or modifying configurations
must always happen at the top level, even when affecting sub-configurations.original
keyword for AAL annotations to insert
__ASTREE_attribute
directives is now deprecated.
The old syntax
original "file.c" insert: __ASTREE_attributes((coverage_ignore));should be replaced with the following new syntax:
"file.c" insert comment: ASTREE_attributes(coverage_ignore);
exclude-signed-in-unsigned-overflows
were both activated.analysis-entry
from having an effect in astree-cxx
mode for C++ analysis.Updated the keil_intrinsics.h
file that is shipped
with the AbsInt toolbox for μVision, to filter/rewrite more keywords.
Users that use this header may need to remove the following parser filters
and macro definitions from their project configurations:
function-like-macro-expansion
(CERT.PRE.0, M.19.7,
M2012.D.4.9) allows for reporting the expansion
of function-like macros.cast_integer_to_enum
)operator-new-requirements
)default-new-overaligned-type
)check_stream_input_char_array
)floating-type-name
(M.6.3, M2008.3.9.2,
M2012.D.4.6, X.A.5.6)
reports the use of unnamed floating-point types.include-guard-missing
to allow comments at all positions in and around include guards.__ASTREE_partition_begin
and __ASTREE_states_track
are exceeded during the analysis,
causing the analyzer to ignore them in the affected contexts. Note that
this rule is not enabled by default.memcpy
and may lose track of copied pointer values.identifier-unique
and static-identifier-reuse
to avoid double reporting and remove false negatives for rule
M.5.5 and M2012.5.9:
static-identifier-reuse
no longer reports
non-static declarations, but only the identifier of a static declaration
(including a reference to the conflicting declaration). It now reports
conflicts in all namespaces, including types, tags etc.identifier-unique
no longer reports
declarations of internal linkage (which are already covered
by the check static-identifier-reuse
).allow-boolean-constants
has been extended
to also transitively apply to operations that do not change
the (essential) type of their operands, such as in _Bool b = condition ? 1 : 0;
min-comment-density
, min-comment-density-his
,
min-number-of-calling-functions
, max-number-of-calling-functions
,
max-number-of-recursive-paths
).include_syntax
(M2012.20.3, M2008.16.2.6,
M.19.3)
to warn about extra tokens in include directives.
This removes false negatives for the associated rules.<function>@"<file>"
.bad-macro-expansion
instead of stdlib-use-fenv
.define-in-block
(M.19.5)min-comment-density-his
(T.14.1)null-statement
(M.14.3, X.A.4.11)null-statement-strict
(X.A.4.11)pragma
(X.A.3.10)pragma-usage
(A.5.2, M.3.4)definition-duplicate
(M.8.9, M2012.8.6).
It no longer reports tentative definitions for which another definition exists
solely in the same translation unit.array-initialization
(M2012.9.3)
which did not warn about code like char arr[10] = {0U};
Only {0}
without sign suffix is allowed in such context
by exception 1 of rule M2012.9.3.object-pointer-diff-cast
, object-pointer-diff-cast-implicit
(M.11.4, M2012.11.3),
object-pointer-diff-cast-strict
, and object-pointer-diff-cast-strict-implicit
(M.11.4), which now also warn about conversions
for which the unqualified object type (cf. M2012.11.3)
differs only in const or volatile qualification.sizeof
(CERT.EXP.44, M.12.3,
M2012.1.3, M2012.13.6)
which did not warn about side effects nested in variable length arrays
and about volatile accesses that are not covered by the exception of
M2012.13.6.reserved-declaration
(CERT.DCL.37, ISO17961.resident,
M.20.2, M2012.21.2),
which did not warn about the declaration of an identifier starting with an underscore.identifier-unique-extern-relaxed
(X.C.NAM.5), which did not warn about non-compliant variables
if a local non-extern variable with same name existed in the same project.cast-pointer-void
(M2012.11.5) on C code, which did not warn about conversions
from type pointer to T when T was typedef’ed to void,
e.g. typedef void T;
language-override
, language-undefine
,
and reserved-declaration
now take the configured c-version
into account. Removed the now obsolete checks
language-override-c99
, language-undefine-c99
,
and reserved-declaration-c99
. This affects the rules
CERT.DCL.37, ISO17961.resident,
M.20.1, M.20.2,
M2012.21.1, M2012.21.2,
and X.A.6.2.redeclaration
(A.1.9, CERT.MSC.40,
M.1.1, M2012.D.2.1,
M2012.1.1, M2012.8.5,
X.E.5.2.2.10). If the c-version
option is set to C11
or C18
,
repeated typedefs that are compliant with the standard
are no longer reported.unused-typedef
(M2012.2.3)
and unused-tag
(M2012.2.4),
which no longer warns about types used solely within C++ code.min-number-of-calling-functions
and max-number-of-calling-functions
.distinct-identifiers-macros
(M.2012.5.5) no longer warns about identifiers
in macro definitions skipped by the preprocessor.loop-counter-modification
and multiple-loop-counters
.inappropriate-bool
(M2012.10.1) no longer warns
if the first operand of the conditional operator ?:
is of pointer type (see MISRA C:2012 TC 2.16).essential-type-assign
(M2012.10.3), composite-cast
,
and composite-cast-width
(M2012.10.8)
no longer warn about expressions of pointer type
(see MISRA C:2012 TC 2.16).inappropriate-char-usage
(M2012.10.2) now warns
when the integer operand has a type of rank greater than
that of int (see MISRA C:2012 TC 2.19).inappropriate-switch-case
(M2012.10.3) warns about case statements
with inappropriate essential type. This removes false negatives
for rule M2012.10.3.controlling-invariant-expression
(M.14.1, M2012.2.1,
M2012.14.3) now also warns about
do .. while(<E>);
loops, if the controlling
expression <E>
is known to always evaluate
to false, but is not an integer constant expression of
essentially Boolean type (see MISRA C:2012 TC 2.27).
This removes false negatives for rule M2012.14.3.return-implicit
(CERT.MSC.37, M.16.8,
M2012.17.4) now exempts the main function,
as it is defined to return 0 (see MISRA C:2012 TC 2.30).
This removes false positives for rule CERT.MSC.37.distinct-extern
(CERT.DCL.40, ISO17961.funcdecl, M2012.5.1)
distinct-identifiers-macros
(M2012.5.5)
identifier-unique-extern
(M.5.7, M2012.5.8, X.C.NAM.5)
identifier-unique-extern-relaxed
(X.C.NAM.5)
identifier-unique-macro
(M.5.7)
identifier-unique
(M.5.7)
identifier-unique-relaxed
(X.C.NAM.5)
static-identifier-reuse
(M.5.5, M.5.7, M2012.5.9)
ambiguous-identifiers
(AUTOSAR.2.10.1M, M2008.2.10.1)
has been extended to also consider identifiers from C code as potential naming conflicts.
It also no longer warns about identifiers in files excluded from rule checks.bad_function
(AUTOSAR.15.5.2A, AUTOSAR.18.9.1A,
AUTOSAR.26.5.1A, CERT-CPP.CON.37C,
CERT-CPP.MSC.30C, CERT-CPP.MSC.50).integral-type-name
(AUTOSAR.3.9.1A, M2008.3.9.2)
which failed to report type (signed/unsigned) long long in C++ code;alignas
, atomic-qualifier
,
atomic-specifier
, floating-type-name
,
integral-type-name
, integral-type-name-extended
,
long-double
, pointer-attribute
,
restrict
, wchar-t
,
which were not applied to the operand of sizeof
.multiple-output-values
(AUTOSAR.8.4.4A),
c-style-cast
(AUTOSAR.5.2.2A, M2008.5.2.4),
implicit-non-void-lambda-return-type
(AUTOSAR.5.1.6A), and
function-return-unused
(M2008.0.1.7, AUTOSAR.0.1.2A)
in dependent contextsmember-function-missing-const
and
member-function-missing-static
(M2008.9.3.3, AUTOSAR.9.3.3M)
to no longer report violations in classes with dependent basesconditional-as-sub-expression
(AUTOSAR.5.16.1A)
with non-trivial data typesclean-global-namespace
(M2008.7.3.1, AUTOSAR.7.3.1M)
reported for parameters within function typesincomplete-data-member-construction
(AUTOSAR.12.1.1A)
for potentially delegating constructors,
to no longer report violations for constructors with a single member initializer that names a dependent typescattered-data-member-initialization
(AUTOSAR.12.1.3A)
in the context of templatesuninitialized-member-modification-in-constructor
(AUTOSAR.12.6.1A)
for constructors in which members are initialized
by a delegating constructor, to no longer report violations
for constructors with a single member initializer that names a dependent typeintegral-type-name
(AUTOSAR.3.9.1A, M.6.3,
M2008.3.9.2, M2012.D.4.6,
X.A.5.6) no longer reports floating-point types.
This removes false positives for AUTOSAR.3.9.1A,
which is not concerned with floating-point types.exception-specification-mismatch-link
(AUTOSAR.15.4.3A, M2008.15.4.1)
now treats throw()
as a non-throwing exception specification.
This removes false positives and false negatives.bitop-type
(M2008.5.0.21, AUTOSAR.5.0.21M) and
bitop-recast
(AUTOSAR.5.0.10M, M2008.5.0.10)
no longer report violations in type-dependent contexts where the operation in question
cannot be determined to be a bit operation vs. a call to an overloaded operator.
This removes false positives for the aforementioned rules.bool()
operator.
This removes false positives.
non-boolean-loop-control
(M2008.6.5.6, AUTOSAR.6.5.6M)
non-boolean-if-condition
(M2008.5.0.13, AUTOSAR.5.0.2A)
non-boolean-loop-condition
(M2008.5.0.13, AUTOSAR.5.0.2M)
non-boolean-logop
(M2008.5.3.1, AUTOSAR.5.3.1M)
non-boolean-conditional
(M2008.5.0.14, AUTOSAR.5.0.14M)
relational-operator-return-type
(AUTOSAR.13.2.3A)
continue-in-bad-loop
(M2008.6.6.3, AUTOSAR.6.6.3M)
comma-operator
(M2008.5.18.1, AUTOSAR.5.18.1M)
no longer warns about uses of the comma operator in C++ fold expressions.throw
and catch
statements in C++ code into account.
This can yield additional violations of the associated check
max-number-of-paths
(T.9.1).reinterpret-cast
(AUTOSAR.5.2.4A) has been split into
reinterpret-cast
and reinterpret-cast-extended
.incomplete-base-construction
(AUTOSAR.12.1.1A, M2008.12.1.2)
has been split into
incomplete-base-construction
and
incomplete-base-construction-strict
./* ASTREE_comment(...) */
and /* ASTREE_suppress(...) */
source directives with a set
of check keys to only apply to the last key in the list.goto-nesting
(M2008.6.6.1, AUTOSAR.6.6.1M)
now treats switch clauses (see M2008.6.4.3)
as blocks and thus warns more strictly about gotos into switch clauses.clean-global-namespace
(M2008.7.3.1, AUTOSAR.7.3.1M)
now treats namespace aliases as namespace declarations.
Thus they are no longer reported as violations.direct-recursion
(AUTOSAR.7.5.2A, M2008.7.5.4)
no longer warns about recursion that occurs in constexpr
functions
if all callers are core constant expressions. In this case, there is no recursion
at runtime.bitop-type
(M2008.5.0.21, AUTOSAR.5.0.21M) and
underlying-signedness-conversion
(M2008.5.0.4, AUTOSAR.5.0.4M)
now honor the option allow-signed-constant-with-unsigned
.initializer-list-constructor-rival
(AUTOSAR.8.5.4A)
to improve the quality of the rule implementation:
std::initializer_list&
parameter
are also treated as initializer-list-constructors.std::operator<<
as a logging mechanism.The server controller now also shows incompatible servers that run on previous releases. Incompatible servers are grayed out in the list of available servers.
<file/>
tag
in custom report configurations now also accepts a new attribute
source-kind=preprocessed|original|all
.<path/>
tag now accepts
the new attribute source-kind=preprocessed|original|all
.type
attribute of the result
tag in the XML result file
is now set to n/a
if the client fails to connect to a project,
e.g. due to parse errors in the DAX file.--export-skip-tu-data
.union tag x;
when tag
refers to a struct and vice versa.__builtin_isnanf
and __builtin_isnanl
./* ASTREE_attributes(...) */
can be used to associate attributes with original source files,
analogously to using the __ASTREE_attributes((..));
directive at file scope.statement
during the evaluation of an AAL position specification:
#if
, #ifdef
, and #ifndef
.__int128
type specifier.void*
as long as the result is not used. Instead, the analyzer will stop
with an error when reaching such an expression.assert
to __ASTREE_assert
,
can now also be used in expressions, rather than only in statements.
The macro can now also be used in a C++ constexpr context from
language version C++14 onwards.hide_directives
to the OS stub libraries.SetEvent
,
ClearEvent
, and WaitEvent
functions
in the OSEK stub library.The test case qk_aal_insert_at_file_scope_into_original
has been removed.
The test cases
qk_check_language_override_c99
,
qk_check_language_undefine_c99
, and
qk_check_reserved_declaration_c99
have been removed from the RuleChecker QSK.