Added support for C++23.
The new C:2025 rule set announced by MISRA last month is supported by Astrée and RuleChecker from that very day.
Of the 223 rules in the MISRA C:2025 rule set, Astrée supports 222, and the standalone RuleChecker supports 219.
Further details can be found as usual under “Help” → “Compliance matrices”.
Added support for OAuth2-based authorization. The user group claim from an OAuth2 UserInfo endpoint can be mapped to user and admin roles on the Astrée analysis server.
smash-threshold
or smash-const-threshold
),
the folding now takes into account the memory layout of all fields of the union type.a / (a + e)
where the variable a
and the expression e
are positive,
and a + e
is > 0, the analysis now infers
that the result is in the range [0.0, 1.0]
.dyn-unroll-cost
.__ASTREE_global_assert
on pointers. After reporting
a global_assert_failure alarm the analysis now proceeds with only
the asserted pointer bases instead of adding INVALID in some cases.incompatible_parameter_type
.__astree_start_process
intrinsic
is reached are taken into account. Processes for which no such intrinsic
is reached are assumed to never run.first-logic-packs
.partition
option for controlling the partitioning domain
is now also available for C++ (analysis mode astree-cxx
).globals-are-initialized
controls
whether global and static variables without explicit initializer
are considered initialized (globals-are-initialized=yes
)
or uninitialized (globals-are-initialized=no
).
The option is enabled by default.
Disabling it does not affect the initial value of such variables.max-bool-vars
is respected.smash-threshold
, but by the new option smash-const-threshold
.alignof_char_array
.__ASTREE_add_widening_thresholds
__ASTREE_partition_bases
__ASTREE_partition_merge_closest
astree-cxx
mode):
__ASTREE_alarm
or __ASTREE_print
directives
when the input string contains escape sequences,
as well as unexpected frontend errors (e.g. when using
__ASTREE_absolute_address
with anonymous structs/unions).__ASTREE_comment
and __ASTREE_suppress
directives that are inserted into code using original-source annotations for C++.
When using relative source ranges without file IDs, they now apply
relative to the point at which they were inserted.__ASTREE_boolean_pack
directives are no longer reported as “semantic hypotheses”.__ASTREE_access
directive.constexpr
functions, to improve precision
for invocations in non-const evaluated contexts.__ASTREE_max_clock
directive with an argument
≤0 are now rejected. In such cases the tool reports
a violation of the check invalid-directive
.__ASTREE_log_vars
are now reported
not as errors but as a violation of the check invalid-directive
.__ASTREE_attributes((...))
and /* ASTREE_attributes */
are now validated more strictly.
If any of the specified attributes is invalid, the whole directive
is discarded with an alarm check_invalid_directive
.__ASTREE_octagon_pack
and __ASTREE_boolean_pack
directives are now rejected immediately.__ASTREE_comment
directive now requires at least one finding-key.__ASTREE_octagon_pack
directive now supports
the use of the dereference operators *
and ->
within access paths for the provided variables.__ASTREE_modify
can now be used in global scope
to express modification after initialization but before starting
the analysis entry function.__ASTREE_global_assert
directive no longer overrides
implicit initializers of asserted variables. This can lead
to new alarms when the initial 0 value is not in the asserted range.__ASTREE_modify
directive
with a range argument are now considered written and initialized after the directive.__ASTREE_alarm(())
now allows using a custom message text
when raising alarms about rule violations.__ASTREE_global_assert
can now be used
for asserting that a variable (or part of it)
is always initialized. The new syntax is
__ASTREE_global_assert((Vp; initialized));
__ASTREE_modify
directive now accepts the new keyword
restrict_enum_values
. It can only be used with variables of enum type.
The directive then sets the value to the set of enumerator values
instead of the range of the underlying type.__ASTREE_volatile_input
directive now accepts
the new keyword restrict_enum_values
. If the target variable
or a member is of enum type, the keyword restricts the range of possible values
to values of the enumerated type, rather than to the range of values
of the underlying integer type.F
suffix to such bounds.0
and factor is 1
).231
or <2−31
.__astree_set_process_core
with an imprecise
core argument no longer raises an invalid_usage_of_concurrency_intrinsic
alarm.
Instead, the analyzer approximates the core as unknown,
allowing interactions with all other cores.If you are upgrading your client from a release older than 23.10, make sure that your License Manager is upgraded as well. This is necessary due to the TLS-encrypted connection between the client and the Manager that was introduced in 23.10.
Support for RHEL 7 is now deprecated.
In the near future, the Linux version
will require at least RHEL 9 (or compatible).
Added dedicated rules for the following CWE guidelines:
Added support for the following MISRA C:2023 rules:
Added support for the following CERT rules:
The new diagnostic check ineffective-file-list-entry
(rule B.1.8) warns about nonexistent paths in path
inclusion/exclusion lists (<paths/>
) in rules and reached-code configurations.
unused-directive
(B.1.5)zero-size-alloc
(A.3.4)0
.fixpoint-computation
(B.1.6)value-specification-ignored
(A.5.1)restrict_enum_values
is used
in an __ASTREE_volatile_input
directive
with a variable or member of union type.ignored-volatile
(B.1.1)
to only report volatile-qualified variables that are lacking
an __ASTREE_volatile_input
directive.constant-expression-wrap-around
(CERT.INT.30, M.12.11,
M2012.12.4, M2023-C.12.4).
The check no longer reports conversion of integer values
to _Bool
.max-number-of-paths
).cast-pointer-void
(AUTOSAR.5.2.8M, M2008.5.2.8,
M2012.11.5, M2023-C.11.5,
M2023-CPP.8.2.6) no longer warns if the operand of the conversion
is a call to one of the allocation functions
malloc
, calloc
,
realloc
or aligned_alloc
.sizeof()
.
sizeof(...) +
” in macros.macro-expansion
(M.19.4) for parenthesized
expression containing the sizeof operator.macro-parameter-unparenthesized-expression
(M2012.20.7, M2023-C.20.7)
which did not report unparenthesized expressions containing the sizeof operator.loose-asm
(M.2.1, M2012.D.4.3, M2023-C.D.4.3)
no longer warns about assembler code that is encapsulated in macros.max-macros-defined
(M.1.1, M2012.1.1, M2023-C.1.1)
are now reported per translation unit.unused-macro
(M2012.2.5, M2023-C.2.5)
now states the name of the respective macro,
and additionally reports macros defined in the preprocessor configuration.distinct-macro
(M2012.5.4, M2023-C.5.4)
now also reports conflicts with macro names stemming from the preprocessor configuration.excessive-interval
(A.5.1) now also reports when no interval
is provided for a value of enum type and the implicitly assumed
interval (based on the underlying type of the enum) contains
more values than the enum type.header-definition
(M.8.5).
The alarm is now reported once per defined identifier,
at the location of the declaration instead of the initializer.header-definition
(M.8.5),
which only reported violations in files named *.h
instead of files being subject to #include
.pointer-integral-cast
(A.3.1, CERT.INT.36,
M.11.3, M2012.11.4,
M2023-C.11.4).
It now reports the types being converted.macro-parameter-unparenthesized-expression
(M2012.20.7, M2023-C.20.7)
no longer warns about unparenthesized expressions
delimited by square brackets or braces. Those cases
are now reported by the check
macro-parameter-unparenthesized-expression-strict
(M2012.20.7, M2023-C.20.7).controlling-invariant
and
controlling-invariant-expression
(CWE.570, CWE.571,
M2012.14.3, M2023-C.14.3)
has changed. The exception for infinite loops
and do while(0)
no longer requires essentially boolean conditions,
but literally 0
or 1
.strcpy-limits
(CERT.STR.31, M2012A1.21.17,
M2023-C.21.17).
The message now provides the target type
and the size of the copied string.initializer-excess
(A.1.8, CERT.MSC.40,
M.1.1, M2012.1.1,
M2012.D.2.1, M2023-C.1.1,
M2023-C.D.2.1, X.E.5.2.2.19).config-function-unknown
(A.5.8) is now also available for C++ (astree-cxx
mode).implicit-override
(AUTOSAR.10.3.2A, M2023-CPP.13.3.1)
are now only reported once per method instead of repeatedly at every redeclaration.assignment-operator-return-value
cast-pointer-to-integer
cast-pointer-to-intptr
cast-function-pointer-to-integer
cast-pointer-void
cast-pointer-void-to-function-pointer
cast-pointer-void-to-integer
cast-pointer-void-to-intptr
cast-integer-to-function-pointer
cast-integer-to-pointer
cast-enum-to-pointer
function-pointer-cast
member-function-missing-const
member-function-missing-static
unary-assign-separation
unrelated-pointer-conversion
implicitly-captured-this
(M2023-CPP.8.1.1) and
implicitly-captured-variable
(M2023-CPP.8.1.2) when the violating
lambda has a parameter with specified auto type.clang_warning
(A.6.2)
can now be reported multiple times at the same code location if it reports
different warnings generated by the clang frontend.Tooltips in the Editor view have been improved and extended.
<aaf/>
allows adding
a reference analysis run to the imported project.
It is equivalent to the command line option --aaf
.<annotations/>
tag are imported
in the order in which they appear in the DAX file.import
attribute is now available
for all direct children of the <dax/>
tag,
except for the <base/>
tag. It is now
also available for the <dax/>
tag itself to allow
a full import of another DAX file.The export of comments and directives inserted by users has been improved.
By default, the export now omits directives generated by the TargetLink integration.
--export-comments <dax file>
--export-aal-omit-generated
--export-aal
command line option<reached_code_statistics_configuration> <paths> <path action="add|remove" kind="file|folder">path</path> </paths> </reached_code_statistics_configuration>
mode=rulechecker
(or in mode=astree
with the option skip-analysis=yes
)
now list comment and suppress directives in the sections
“Further directives” and “Semantic hypotheses”.--list-projects
allows users
to list all (visible) projects on the server in batch mode.--no-analysis
skips the (re)computation of analysis results.
It replaces the options --import-only
,
--export-only
, --preprocess-only
,
and --report-only
, which are still accepted
but deprecated. We recommend removing the deprecated options
from scripts and replacing them with --no-analysis
.--report-file
or --xml-report-file
.<separate-function/>
that appear in a DAX file but are not supported in mode astree-cxx
are now reported as errors when running the analysis in that mode.<preprocess><base>
tag of the imported DAX
is no longer ignored for OS configurations.<rulechecks/>
section
of the XML report now list the added/removed source paths
instead of the checked files. The new format is:
<configuration> <paths> <path action="add|remove" kind="file|folder">...</path> </paths> </configuration>
--id
command line option (or the DAX tag <id/>
)
and a project with the specified ID already existed on the server.size_t
, ptrdiff_t
, wchar_t
,
wint_t
, char16_t
, char32_t
,
intptr_t
, intmax_t
, sig_atomic_t
.__ASTREE_partition_begin
with float type argument by raising an invalid_directive
alarm.RULECHECKER_comment(...)
source directives at subsequent code locations,
or shift findings reported at original-source locations by one line.#include
file not found).__ASTREE_attribute((...))
by /* ASTREE_attribute(...) */
in the stub libraries. This improves the efficiency of the frontend
when parsing translation units that include stub library headers,
in particular for C++, and removes spurious alarms about rule violations
related to the check multiple-include
(M.19.15, M2012.D.4.10,
M2023-C.D.4.10).The obsolete test cases qk_abi_alignof_char_array
,
qk_commandline_export_only
, and
qk_commandline_preprocess_only
have been removed from the Astrée QSK.
The obsolete test cases
qk_abi_alignof_char_array
,
qk_commandline_preprocess_only
,
qk_filter_ignore
,
qk_filter_more_functions
,
qk_filter_one_function_with_stub
, and
qk_filter_replacement
have been removed from the RuleChecker QSK.