The concept of “Notification” messages has been removed from the tool:
auto-unroll
feature to consider
more loops for automatic unrolling.__ASTREE_assert
and __ASTREE_global_assert
directives no longer prevent the domain of arithmetic-geometric progressions
(controlled by the option dev-geo
) from computing precise bounds.__ASTREE_modify
with a value range argument
(such as [1, 9]
), so that it performs a strong update when given as
first argument a generic array access with structure access (such as t[].a
).
The previous behavior (weak update) was sound but imprecise with regard
to the documented semantics.warn-on-uninitialized=no
.partition-multiple-switches
.partition-predicate-functions
that permits partitioning of function calls in conditions.
This allows for a more precise analysis of code like
if (predicate(x)) { ... }The new option is disabled by default. The value
*
enables
heuristic partitioning. It is also possible to explicitly add or remove
functions from the partitioning.__astree_not_a_number()
that evaluates to NaN
and is considered a constant expression.text-report-tables
.typeof
operator into account.else
,
and take into account case
and default
labels.**/
All the following code metrics are now also available for C++ code:
clang-warning
).asm
is now accepted and ignored
as a declaration specifier by the C frontend.__builtin_constant_p
.__builtin_sel
.__packed__
type specifier,
which is handled analogously to the packed
attribute
aligned
in the following forms:
_Alignas()
in type declarations, e.g.
typedef _Alignas(8) int aligned_int;
The effects of these attributes and specifiers are also semantically taken into account by the analyzers whenever appropriate.
<paths/>
and <path/>
for including/excluding files and folders into/from rule checking
(see also release notes for RuleChecker).<include-alarms>
tag, the attribute type
has been renamed into class
.<comment-pattern>
tag, the attribute type
has been renamed into category
.<!-- DAX file excerpt showing the modified attributes --> <reports> <report-configuration> <results> <findings> <include-alarms class="..."> <annotations> <comment-pattern classification="..." category="...">
control_flow_anomaly
has the form
ALARM (D): Function call to ... never returns in this contextor
ALARM (D): Analyzed entry-point ... never returnsIt is controlled by the option
warn-on-control-flow-anomaly
and enabled by default.loop_unbounded
has the form
ALARM (D): Loop may be unboundedIt is controlled by the options
warn-on-unbounded-loop
and gauges
(both must be active) and disabled by default.code-lines
(default is 3
). Code excerpts are displayed in the GUI and are contained
in the text and XML report files. Example:
[ call#main at astree.cfg:18.0-50.1 call#basic_examples at astree.cfg:26.6-22 loop=11/12 at scenarios.c:72.6-73.26 ALARM (A): out-of-bound array index {10} not included in [0, 9] at scenarios.c:73.19-20 ] > ArrayBlock[i] = i; > ~
ERROR:
.<report configuration>... <results>... <findings>...
--id
or --revision
. The option specified on the command line now
consistently takes precedence over the value from the DAX file.--analysis-name
and --analysis-description
for specifying the analysis name and description on the command line.
The command line options take precedence over the values specified in DAX.-b
or -B
). The value is empty for analyses
that are started manually from the client. If the analysis has been
run multiple times, the value of the latest analysis run is displayed.
The batch command line is now also available in all report files
(text, XML, and custom).<reports> <report-configuration> <results absolute-file-paths="yes">
simplify=yes
.<preprocess import="..."/>
now also takes the global
<base/>
tag of the imported <preprocess/>
sections into account.keep-ctype-for-constants
allows using the real type
of constant expressions instead of the type of lowest rank. This affects
rule checks that consider the underlying/essential type (according to MISRA C).boolean-type
now takes a regular expression instead
of a single identifier. This allows the specification of multiple types to consider boolean./* RULECHECKER_suppress() */
/* RULECHECKER_suppress(rules-category) */
identifier-unique-*
or identifier-significance
).<stdin>
, <built-in>
, <command line>
).Rule checks for the following rules are now available without envoking a full Astrée runtime error analysis:
composite-cast
(M2012.10.8)
has been split into the checks
composite-cast
and composite-cast-width
,
checking either the type category or the type width for conversions on composite expressions.macro-parameter-unparenthesized-expression
into the two checks macro-parameter-unparenthesized-expression
and macro-parameter-unparenthesized-expression-strict
.
Macro parameters that are expanded into parameter lists
can thus be excluded from checks for rule M2012.20.7.return-implicit
.
This removes false alarms for the rules
M.16.8 and M2012.17.4.global-object-scope
. For example,
providing the argument “main
” will prevent the main function
from being reported.RULECHECKER_SUPPRESS
source directive (e.g. in stub libraries shipped with the tool), no longer contribute
to the check max-macros-defined
for rule M.1.1.return-implicit
.
This removes false alarms for rule CERT.MSC.37.global-object-scope
. For example,
providing the argument “main
” will prevent the main function
from being reported.return-reference-local
for checking part of rule
CERT.ARR.30 without runtime error analysis by Astrée.Added support for the following CWE rules:
static-object-name
and static-object-name-const
are now restricted to objects of file scope.local-static-object-name
and local-static-object-name-const
to check the naming of local objects with static storage duration.switch-clause-break
no longer warns about switch clauses
that are terminated by a continue or return statement. Such clauses
are now reported by the new checks switch-clause-break-continue
and switch-clause-break-return
.function-return-unused
when checking compound expressions (GCC extension)._Static_assert()
with a non-constant expression as condition
now triggers a violation of diagnostic rule A.1.6
instead of an error.member-name-reuse
, identifier-unique
,
identifier-unique-macro
, identifier-unique-typedef
,
and identifier-unique-extern
to unnamed struct/union types and their members.expression-statement-dead
has been split into
the checks expression-statement-dead
and expression-statement-pure
.
The latter considers only expression statements which have a function call
as a sub-expression, while the former considers all other expression statements.global-object-scope
. For example,
providing the argument “main
” will prevent the main function
from being reported.check max-size-of-statement
)
is now also checked on C++ code.definition-duplicate
and improved context information of rule violation alarm.member-function-missing-const
to warn in additional cases.non-standard-escape-sequence
to warn about more non-standard escape sequences.single-use-pod-variable
.The following code metrics are now available for C++ code:
enumerator-value
)_Alignas
.__packed__
.annotation-insertion-failed
,
conflicting-absolute-addresses
,
missing-rulechecking-phases
)return-empty
, return-non-empty
)empty-struct
)pointer-arithmetic-void
)clang-warning
)./* ASTREE_... */
or /* RULECHECKER... */
are now reported as violations of the diagnostic rule A.5.1.ignored-volatile
)unused-suppress-directives
)isfinite
, isinf
, isnormal
,
and signbit
(math.h) in the example stub implementation
of the C library is now compatible with MISRA. This removes alarms
about MISRA rule violations when using these macros.wchar_t
now affect
the WCHAR_MAX
and WCHAR_MIN
macros provided
by the C stub library implementation.__ASTREE_CXX_assert(x)
is equivalent to
__ASTREE_assert((x))
.
C files using the new macros can be analyzed in C (astree mode) as well
as in C++ (astree-cxx mode) analysis projects.__builtin_fnmadd
and __builtin_fnmsub
are now provided in a platform-specific way.
This fixes the semantics for the x86 target.__builtin_bswap64
is now available for all targets.compcert_x86_32.dax
is now x86_32_compcert.dax
.substitute-functions
is no longer overwritten
by the TargetLink importer. Instead, the substitutions are now appended.dump-unused-suppress
is now B.1.1 check unused-suppress-directive
warn-volatile-ignore
is now B.1.1 check ignored-volatile
warn-undef-functions
has been removed from the interface.__ASTREE_volatile_input
directives are now reported as invalid
and the duplicate directive is ignored.continue-on-definite-rte
has been fixed for the analyzer built-in functions
__astree_stop_process
(when applied to the current process) and
__astree_chain_process
.
These directives will now stop the execution for the current process,
even when the option continue-on-definite-rte
is set.exclude-signed-in-unsigned-overflows
,
separate-with-caller-stack-pointers
, and octagon
.__ASTREE_global_assert
) now
triggers an assertion failure. The analyzer then continues the analysis
without considering the assigned address as a possible value
for the asserted variable.memcpy
, bzero
,
access
, and trash
operations with non-integer
or too large size arguments. The message now explicitly states the assumption
under which the analysis is carried on:
ALARM (A): ignoring invalid memory operation with non-integer or too large size argument at ...
pack-boolean-types
.dynamic-smash-variables-threshold
no longer smashes variables that differ with respect to the const
qualifier. This modification ensures that “write to constant”
alarms are issued consistently if the option is enabled.Options |
qk_option_boolean_type qk_option_pack_boolean_types qk_option_text_report_tables qk_option_warn_on_unbounded_loop qk_option_warn_on_control_flow_anomaly qk_option_partition_multiple_switches qk_option_partition_predicate_functions qk_option_code_line |
Directives | qk_directive_suppress_source |
Alarms |
qk_alarm_unbounded_loop qk_alarm_control_flow_anomaly |
Intrinsics |
qk_intrinsic_not_a_number qk_intrinsic_set_process_phases |
Checks |
qk_check_missing_rulechecking_phases qk_check_unused_suppress_directives qk_check_return_reference_local qk_check_pointer_qualifier_cast_const qk_check_pointer_qualifier_cast_const_implicit |
Rules |
qk_rule_cwe_562 qk_rule_cwe_825 |
The test cases qk_option_warn_undef_functions
,
qk_option_warn_volatile_ignore
, and
qk_option_dump_unused_suppress
have been removed from the Astrée QSK.
Options |
qk_option_clibrary qk_option_keep_ctype_for_constants qk_option_keep_comments qk_option_path qk_option_remove_analysis_files qk_option_use_internal_preprocessor qk_commandline_analysis_description qk_commandline_analysis_name |
Checks |
qk_check_alignas_extended qk_check_ambiguous_identifiers qk_check_annotation_insertion_failed qk_check_array_size_tentative qk_check_array_size_unknown qk_check_builtin_sel qk_check_builtin_constant_p qk_check_clang_error qk_check_clang_warning qk_check_composite_cast_width qk_check_conflicting_absolute_addresses qk_check_digraph_token qk_check_enum_usage qk_check_expression_result_unused qk_check_expression_statement_pure qk_check_flexible_array_member qk_check_float_suffix qk_check_function_return_unused qk_check_identifier_unique_tag qk_check_ignored_volatile qk_check_invalid_free qk_check_local_static_object_name qk_check_local_static_object_name_const qk_check_loose_asm qk_check_macro_parameter_unparenthesized_expression_strict qk_check_missing_loop_counter qk_check_missing_rulechecking_phases qk_check_mixed_string_literal_concatenation qk_check_mmline_comment qk_check_non_boolean_if_condition qk_check_non_constant_static_assert qk_check_non_standard_escape_sequence qk_check_packed_specifier qk_check_pointer_comparison qk_check_pointer_subtraction qk_check_return_reference_local qk_check_return_non_empty qk_check_single_use_pod_variable qk_check_switch_clause_break_continue qk_check_switch_clause_break_return qk_check_switch_not_exhaustive qk_check_type_file_spreading qk_check_underlying_widening_cast_float qk_check_uninitialized_ready qk_check_union_assignment qk_check_unreachable qk_check_unsigned_suffix qk_check_unused_internal_variable qk_check_unused_local_variable qk_check_unused_parameter_virtual qk_check_unused_suppress_directives |
Rules |
qk_rule_m2012_1_3 qk_rule_m2012_18_2 qk_rule_m2012_18_3 qk_rule_m2012_18_6 qk_rule_m2012_18_7 qk_rule_m2012_22_2 qk_rule_cert_arr_36 qk_rule_cert_dcl_30 qk_rule_cert_mem_34 qk_rule_cwe_415 qk_rule_cwe_467 qk_rule_cwe_468 qk_rule_cwe_481 qk_rule_cwe_558 qk_rule_cwe_676 qk_rule_cwe_761 qk_rule_iso17961_addrescape qk_rule_iso17961_dblfree qk_rule_iso17961_ptrobj qk_rule_iso17961_xfree qk_rule_a_1_12 qk_rule_a_1_13 qk_rule_a_2_20 qk_rule_a_2_21 qk_rule_a_5_4 qk_rule_a_6_2 qk_rule_a_2_20 qk_rule_b_1_1 qk_rule_b_1_2 qk_rule_m_17_2 qk_rule_m_17_3 qk_rule_m_17_6 |