symb-max-depth
and list-decls
.cut-arithmetic-operations-on-null
and cut-write-to-const
are now enabled by default.
The new defaults improve the analyzer’s precision and performance
and are suitable for most analysis projects.assume-unknown-pointers-are-valid
has been removed. For analysis projects that used this option
it is advised to enable the more efficient option
continue-on-definite-rte
instead.smash-const-threshold
and dynamic-smash-const-threshold
for controlling
the static and dynamic smashing of const arrays independently
from the settings for non-const arrays. The options
smash-threshold
and dynamic-smash-threshold
no longer apply to const arrays. To retain the behavior of previous releases,
set smash-const-threshold
to the same value as
smash-threshold
, and dynamic-smash-const-threshold
to the same value as dynamic-smash-threshold
.dynamic-smash-threshold
is now handled consistently in all cases. Dynamic folding is triggered
when the number of possible targets of a read or write access is greater
or equal to the configured threshold. In previous versions, the smashing
was sometimes only triggered when the number of targets was strictly greater
than the threshold.filter1
, filter_real
, and filter_complex
to simplify the use of the filter domain.automatic-octagon-packing
).
The former sub-options fewer-oct
and max-variable-size-in-octagon
are no longer needed and have been removed.taint-control-flow-context
enforces taint propagation to the branches of control statements
when their controlling expression is tainted.__astree_bzero
is now handled more precisely and it no longer triggers
dynamic smashing or folding.a + (b - a) * f / d
when 0 ≤ f
≤ d
.
Such calculations typically appear in PT1 filters,
low-pass filters, and linear interpolations.__astree_memcpy
and assignments when source and destination are folded differently.__ASTREE_global_assert
on multi-dimensional arrays.__ASTREE_partition_ranges
directives.char arr[4294967295]; char *ptr = &arr[0] + 4294967296;the second line now also causes a definitive runtime error, since the offset is definitely too large.
__ASTREE_modify
directive has been extended to allow
the specification of additional distance constraints between neighboring
array elements. These constraints can be taken into account by the interpolation domain
to compute more precise bounds in interpolations over arrays.__ASTREE_ignore
directive,
such that it now also accepts regular expressions for matching multiple
or very complex function names (e.g. for C++).invalid_memory_operation
is now only raised
when the size argument that is supplied to an __astree_memcpy
,
__astree_bzero
, __ASTREE_access
, or __ASTREE_trash
is not an integer value between 0
and 2^62 - 2
.
The invalid memory operation is no longer ignored. Instead it is performed
with the admissible range of values for the size argument.write_to_constant_memory
alarms
for bytes that are declared both const and non-const, which happens when const-
and non-const-qualified members of a type overlap in memory, like in the union
{int m; const int c;}
or with bitfield members of a struct.__astree_memcpy
.__ASTREE_octagon_pack
directives
to be unexpectedly ignored.element-type-incomplete
warns if the element type
of an array is incomplete at the point of declaration.empty-initializer-list
warns about braced
initializer lists that are empty.mixed-const-qualification
(rule A.5.6) warns about mixed const and non-const
qualification on shared bytes in struct/union, which will not be considered
for reporting write_to_constant_memory
alarms by the Astrée analyzer.object-pointer-diff-cast-strict
(M.11.4)object-pointer-diff-cast-strict-implicit
(M.11.4)object-pointer-diff-cast
(M.11.4, M2012.11.3)object-pointer-diff-cast-implicit
(M.11.4, M2012.11.3)newline-eof
(M2012.1.3)
warns about C source files not ending in a newline, which is a requirement
imposed by the C standard.expression-result-unused
), and operations that do not have
an effect on the operand, like +0
(check redundant-operation
).unused-function
(CERT.MSC.12, CWE.561,
M.14.1, and M2012.2.1)
reports static and external functions which are declared or defined
but then never used in the project.unreachable_code
. This check is only available when analyzing
C++ code with Astrée (analysis mode astree-cxx).unused-parameter
(M2008.0.1.3, AUTOSAR.0.1.3M,
AUTOSAR.0.1.4A, M2008.0.1.11)
and unused-parameter-virtual
(M2008.0.1.3, AUTOSAR.0.1.3M,
AUTOSAR.0.1.5A) no longer warn about parameters
that are explicitly marked as [[maybe_unused]]
.unused-private-method
(AUTOSAR.0.1.3A) warns about unused private member functions.memcpy-overlapping-array
(M2008.0.2.1, AUTOSAR.0.2.1M)
reports uses of memcpy
on overlapping parts of the same array,
without depending on the Astrée analyzer.deprecated-declarations
,
deprecated-implicit-copy
,
deprecated-implicit-copy-with-destructor
,
deprecated-exception-specification
(AUTOSAR.1.1.1A)
to report more deprecated features and, in some cases,
replace less specific clang_warning
diagnostics.//
file path separators
in #include
directives.astree-cxx
mode. They are now only reported on C++ files
as documented.#pragma
message no longer triggers the check clang-warning
.integral-type-name
(AUTOSAR.3.9.1A, M2008.3.9.2,
M.6.3, M2012.D.4.6,
X.A.5.6) regarding uses
of the plain char type, and int as argument in C++ postfix operator declarations
that are mandatory for overload resolution.integral-type-name-extended
(X.A.5.6)
now reports uses of the char keyword in plain char type.check_definition_duplicate
check_external_file_spreading
check_undefined_extern
check_undefined_extern
and false negatives for check_definition_duplicate
and check_external_file_spreading
in analysis projects with mixed C/C++ code.unreachable-code
(CERT.MSC.12, CWE.561,
M.14.1, M2012.2.1,
X.A.5.22) for complex expressions statements.definition-duplicate
.
The check now also warns about duplicate definition of functions.controlling-invariant
and boolean-invariant
to avoid false negatives.extern-function-declaration
(M.8.1, M2012.8.4)
which did not warn about non-compliant function definitions
when an already processed translation unit contained a declaration
of this function.type-compatibility-link
(A.1.1, CERT.DCL.40,
CERT.MSC.40, ISO17961.funcdecl,
M.1.1, M.8.4,
M2012.1.1, M2012.D.2.1).
Each symbol is now only reported once per translation unit.global-object-scope
(CERT.DCL.15, CERT.DCL.19,
M.8.10, M2012.8.7,
X.B.5.5), which now also reports
variables introduced by C90 implicit function declarations.unused-parameter
(M2012.2.7)
which reported parameters solely used in Astrée directives.implicit-zero-comparison
(M.13.2),
which did not warn about the operand of the logical operators
!
, &&
, ||
.unreachable-code-after-jump
(CERT.MSC.12, CWE.561,
M.14.1, M2012.2.1),
which failed to warn about unreachable code
at the end of a function body and in switch case clauses.if-condition-lvalue
(X.A.5.24).identifier-unique-relaxed
and identifier-unique-extern-relaxed
(X.C.NAM.5)
which did warn about local static objects.local-object-scope
(CERT.DCL.19, M.8.7,
M2012.8.9) for variables used only in the initializers
of function-local static objects within the same function.external-redeclaration
(M2012.8.5),
which did not warn about redeclarations in the same line of source code.no-whitespace-after-prefix
(X.A.4.14)
no-whitespace-before-postfix
(X.A.4.14)
statement-whitespace
(X.A.4.9)
whitespaces-around-binary
(X.A.4.12)
whitespaces-around-function-call
(X.A.4.14)
macro-unused
(M2012.2.5) to report
unused macros that are defined as:
#ifndef MAKRO /* was formerly considered a use of MAKRO */ #define MAKRO 42 #endif
assignment_overlapping
(M.18.2, M2012.19.1).pointer-integral-cast-implicit
(A.1.4, CERT.INT.36,
CERT.MSC.40, M.1.1,
M.11.3, M2012.D.2.1,
M2012.1.1, M2012.11.4)
for expressions of array type, which are first converted to pointer
and then to integral type. For example:
int arr[10]; int var = arr; // the address of arr is converted to int, which was not reported
pointered-deallocation
(CERT.DCL.30, CERT.ARR.30,
CWE.562, ISO17961.addrescape,
M.17.6, M2012.18.6),
which in rare cases was reported for calls to separately analyzed functions.incompatible-function-pointer-conversion
andincompatible-object-pointer-conversion
type-compatibility
andtype-compatibility-link
incompatible-argument-type
long-double
(AUTOSAR.0.4.2A),
wchar-t
(AUTOSAR.2.13.3A),
and integral-type-name
(AUTOSAR.3.9.1A,
M2008.3.9.2), which in some cases
did not warn about explicit template parameters.long-double
(AUTOSAR.0.4.2A),
wchar-t
(AUTOSAR.2.13.3A)
and integral-type-name
(AUTOSAR.3.9.1A, M2008.3.9.2).unparenthesized-binary-logop-operand
(AUTOSAR.5.2.6A)
which erroneously reported parenthesized expressions
that were subject to implicit type conversion.member-function-missing-const
(AUTOSAR.9.3.3M, M2008.9.3.3)
for methods in class template specializations and false positives
for out-of-line method template specializations.uninitialized-member-modification-in-constructor
(AUTOSAR.12.6.1A) when members are initialized
in the constructor body by the array subscript operator []
.member-function-missing-const
(AUTOSAR.9.3.3M, M2008.9.3.3)
when members are accessed or modified by the array subscript operator []
.include-guard-missing
(AUTOSAR.16.2.3M, M2008.16.2.3).
It no longer warns if a properly guarded header file includes itself.include-guard-missing
(AUTOSAR.16.2.3M, M2008.16.2.3).
It now also warns about trailing comments behind the #endif
of an include
guard.ambiguous-identifiers
(AUTOSAR.2.10.1M, M2008.2.10.1)
for preprocessor macro identifiers conflicting with non-macro identifiers.identifier-unique-tag
(M2008.2.10.4)
for definitions and forward declarations of structs within
the same translation unit. Furthermore, violations of this check
are now only reported once per translation unit.check-undefined-extern
(AUTOSAR.3.2.2M, AUTOSAR.3.2.4M,
CERT-CPP.DCL.60, M2008.3.2.2,
M2008.3.2.4)
which reported violations in generic template entities,
even if definitions were available for all instantiations.numeric-char-usage
and plain-char-usage
for function-call arguments
(AUTOSAR.5.0.11M, AUTOSAR.5.0.12M,
M2008.5.0.11, M2008.5.0.12).exception_specification_mismatch_link
.
Implicit or default definitions of destructors,
default/copy/move constructors, and copy/move assignment operators
without explicit exception specification no longer participate
in this check.class_inconsistent_definitions
(A.CPP.7.2, M2008.3.2.2,
M2008.3.2.4, AUTOSAR.3.2.2M,
AUTOSAR.3.2.4M, CERT-CPP.DCL.60)
for certain cases of class members of anonymous struct type.static-function-declaration
(M2008.3.3.2, AUTOSAR.3.3.2M,
M.8.11, M2012.8.8,
CERT.DCL.36).<sources/>
.
The new structure of these sections is now as follows:
<autosar> <files/> <sources> <base/> <includes/> <defines/> <automatic-includes/> </sources> </autosar>
<osek> <oil-file/> <oil-includes/> <sources> <base> <includes/> <defines/> <automatic-includes/> </sources> </osek>
<relational>no</relational>
with relational domain options.
If <relational>no</relational>
is present
in a DAX file, it deactivates all relational domains,
regardless of their individual settings.<cxx-version>C++14</cxx-version>
tag
to preserve the former behavior.inline-semantics
allows to configure
the semantics of the inline specifier. Available values are “standard”,
which corresponds to the C language standard (default), and “gnu89”,
which implements GCC’s -fgnu89-inline
.--import-only
imports an AAF file without automatically starting the analysis.ASTREE/RULECHECKER_suppress/comment
)
that are inserted via AAL annotations are now always applied to the same findings
that they would be applied to if they were written as comments
in the original source code.<model>-astree-alarms.html
to <model>-alarms.html
and
<model>-astree-log.xml
to <model>-log.xml
.
Both reports are also available when using RuleChecker.raise_at_caller
(e.g. in the C stub library).raise_at_caller
feature).raised_at_caller
,
it shows the CAUSE line of the first message instead of the ALARM line.
The preferred column can be configured via the context menu
of the table header in the Findings view.<export>-abi.dax
that contains
the ABI settings of that reference target.--export-invariants
) and analysis revisions
(--export-revisions
) in batch-mode exported
AAF files (specified using the option --export
).The server no longer creates a new "admin" user with default password when an existing data directory with all its contents is moved to a new directory using the server controller.
__ASTREE_partition_ranges
directives.cxx_invalid_this_pointer
alarm.The following test cases have been removed:
The test case
qk_check_include_tgmath
has been removed from the RuleChecker QSK.