StaticSemanticAnalysis¶
Classic semantic analysis involving pointers, data-flow, numerical values. This analysis always analyses the whole program
Required inputs: IR
Possible Messages
This rule has no predefined messages.
Options¶
The following places define options that affect this rule: Analysis-GlobalOptions
debugging¶
Options that can help to debug the analysis.
debugging.dump_as_dot : bool =
FalseDescription
Selects whether the constraint graph is dumped as text or into a dot file when option dump_final_constraint_graph or dump_initial_constraint_graph is used.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: no impact Performance: less
debugging.dump_final_constraint_graph : bool =
FalseDescription
Print the final constraint graph.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: no impact Performance: less
debugging.dump_initial_constraint_graph : bool =
FalseDescription
Print the constraint graph before solving starts.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: no impact Performance: less
debugging.logging_level
Type: AxivionLoggingLevel
Default:
'ERROR'Description
Set this to see more verbose output during analysis execution.Technical notes
Setting this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: no impact Performance: less if different from None
performance¶
Options that impact the runtime, memory, and precision of the analysis engine but do not hide possible findings.
performance.advanced
Performance and precision options that are only useful for specific language or project features
performance.advanced.additional_array_equalities : bool =
TrueDescription
Let abstract-interpretation-based analysis compute additional array equality constraints. These constraints allow the symbolic expression domain to infer facts of the formi==j ==> a[i] == a[j]. This makes the analysis more precise, but can be slow if many array operations are present.Relation to other options
An abstract-interpretation-based analysis has to be enabled for this option to have an effect. See the option performance.general.enhanced_analysis for details on how to enable such an analysis.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.advanced.buffer_analysis_precision_threshold : int =
1500Description
For some rules, the abstract-interpretation-based analysis tries to infer which arrays are buffers (i.e., are null-terminated, or segmented into multiple null-terminated parts). For this, is computes various constraints for each source code location. If more constraints than this threshold are computed, the abstract-interpretation-based analysis switches to a coarse overapproximation for this routine.
Set to 0 to disable the threshold.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more (0 most) Performance: less (0 slowest)
performance.advanced.enum_analysis_precision_threshold : int =
50000Description
For some rules, the abstract-interpretation-based analysis tries to infer if a variable value is a valid enumerator for one or more of the available enum types. If there are more variable-value pairs than this threshold at a source code location, abstract-interpretation-based analysis disables this inference for the current routine.
Set to 0 to disable the threshold.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more (0 most) Performance: less (0 slowest)
performance.advanced.null_analysis_enhanced_precision : bool =
TrueDescription
Whether analysis of null dereferences should track more facts about symbolic (i.e. indirectly accessed) memory locations likea->bacross routine borders.
For example, for a structShaving a fieldfof pointer type, the enhanced precision can help avoiding false positives in situations similar to the following example.void do_it(S* param) { // information ps->f != nullptr transferred from (single) caller // to parameter param *(param->f) = ... } int main(void) { S* ps; ... if (ps->f != nullptr) { do_it(ps); } return 0; }Relation to other options
Either the option performance.general.enhanced_analysis or the option performance.pointer_analysis.use_abstract_interpretation_for_null has to be enabled for this option to have an effect.
The following rules check for null pointer dereferences and are affected by this option.
- FaultDetection-NullPointerDereference
- CertC-EXP34
- CertC++-EXP34
- CWE-476
- MisraC-21.1
- MisraC2012Directive-4.1
- MisraC++-0.3.1
Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.advanced.references_analysis
Options for specialized analyses tracking validity properties of pointers and references.
performance.advanced.references_analysis.abstract_references_analysis : bool =
TrueDescription
Use additional abstract references analysis to refine results of the null pointer check. The analysis tracks facts for smartpointers and iterators (referred to as "abstract reference" types). The analysis uses specifications given via Externals rules to interpret the effect of operators likeoperator==etc. for abstract references. For own iterator / smartpointer types, additional Externals rules can be specified. The types of abstract references that have to be tracked are specified in the rule Externals-AbstractReferenceTypes.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact (assuming external specifications are correct) Precision: more Performance: less
performance.advanced.references_analysis.abstract_references_precision_threshold : int =
200Description
If additional abstract references analysis is active: controls precision of tracked facts about abstract references. Higher value means more precision.Technical notes
Increasing this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.advanced.symbolic_expressions_precision_threshold : int =
1500Description
If more symbolic expression facts are computed than this threshold at a source code location, the symbolic analysis switches into a very coarse mode for the routine.
Set to 0 to disable the threshold.Relation to other options
An abstract-interpretation-based analysis has to be enabled for this option to have an effect. See the option performance.general.enhanced_analysis for details on how to enable such an analysis.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more (0 most) Performance: less (0 slowest)
performance.advanced.use_full_pointer_analysis : bool =
FalseDescription
Run the more precise but also more costly full pointer analysis even if no rule requests it.Relation to other options
Most semantic analysis rules force the execution of a full pointer analysis and this option has no effect. The rules concerned with exception behavior (FaultDetection-*except*) do not require a full pointer analysis, but can benefit from it. For specific configurations, where one is only interested in these exception rules, one can enable this option to run the more precise but also more costly full pointer analysis.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general
Performance and precision options that are useful for most situations.
performance.general.abstract_interpretation_coarse_callcycle_analysis : bool =
FalseDescription
Let abstract-interpretation-based analysis compute a fixpoint for recursive function calls instead of using an overapproximation.Relation to other options
An abstract-interpretation-based analysis has to be enabled for this option to have an effect. See the option performance.general.enhanced_analysis for details on how to enable such an analysis.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: less Performance: more
performance.general.abstract_value_analysis_options
Options controlling the precision of the abstract value analysis. These options are only relevant if performance.general.abstract_value_analysis_options.abstract_value_analysis is set to true.
performance.general.abstract_value_analysis_options.abstract_value_analysis : bool =
TrueDescription
Use an additional intra-procedural analysis after the initial value propagation. This analysis tracks numerical information of symbolic memory locations likea->bora[i]. It can, for example, infer thatx > 42holds inif (a->b > 42) { int x = a->b; }.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.abstract_value_analysis_options.analyse_system_includes : bool =
FalseDescription
Controls whether the abstract value analysis also should analyse files in system includes. Should only be set to true if findings for system includes are also configured to be reported.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.abstract_value_analysis_options.interval_precision_threshold : int =
250Description
If more numerical facts for memory locations are computed than this threshold at a source code location, the analysis switches into a very coarse mode for the routine. This can help speeding up the analysis in the case of large routines.
Set to 0 to disable the threshold.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.abstract_value_analysis_options.maximal_cfg_size : int =
1000Description
Abstract value analysis is only executed for functions having less or equal control flow blocks than the value of this option. It can be used to exclude excessively large and complex routines from the abstract value analysis.
Set to 0 to disable the threshold.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.abstract_value_analysis_options.perform_initial_pass : bool =
FalseDescription
Perform a light-weight variant of abstract value analysis before the initial value propagation. This pass propagates information about inequalities of symbolic memory locations to the initial value propagation.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.abstract_value_analysis_options.widening_threshold : int =
5Description
Controls how soon the abstract value analysis tries to overapproximate effects of loops. A higher value of this option can improve the precision of computed numerical information, but can also make the analysis slower.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.array_analysis_options
Configuration options for array analyses.
performance.general.array_analysis_options.array_analysis : bool =
TrueDescription
Use additional array analysis to compute possible values for arrays containing numerical values or pointer values. Further analyses can then assume that a read of an array element is one of the values computed by the analysis. E.g.,int arr[4] = {1,2,3,4}; ... // no write for arr arr[3] = 10; ... // no write for arr int x = arr[i]; // x in range [1, 10]Soundness is affected in the case of out-of-bounds accesses: the analysis is allowed to assume the pre-computed values for each array element access, even if it is possibly out-of-bounds (e.g. ifi = 4in the example).Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness (see description) Precision: more Performance: less
performance.general.array_analysis_options.numerical_precision : int =
20Description
If additional array analysis is active: controls precision of tracked numerical information for arrays. Higher value means more precision.Technical notes
Increasing this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.array_analysis_options.pointer_precision : int =
20Description
If additional array analysis is active: controls precision of tracked pointer information for arrays. Higher value means more precision.Technical notes
Increasing this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.enhanced_analysis : bool =
FalseDescription
Run additional abstract-interpretation-based analysis in different rules.Relation to other options
Instead of enabling this option, you can also selectively enable it for certain rules. If this option is enabled, it takes precedence over the selective options. The following rules check for division-by-zero, overflow, and out-of-bounds. Each of them has an option to selectively enable an additional abstract-interpretation-based analysis.
- FaultDetection-DivisionByZero
- FaultDetection-IntegerOverflow
- FaultDetection-OutOfBounds
- CertC-INT30
- CertC-INT32
- CertC-INT33
- CertC++-INT30
- CertC++-INT32
- CertC++-INT33
- SecureCoding-5.26
For the following rules, an additional abstract-interpretation-based analysis can be enabled with the option performance.pointer_analysis.use_abstract_interpretation_for_null.
- FaultDetection-NullPointerDereference
- CertC-EXP34
- CertC++-EXP34
- CWE-476
- MisraC-21.1
- MisraC2012Directive-4.1
- MisraC++-0.3.1
Technical notes
This analysis uses symbolic expressions and special domains for tracking null dereferences.
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.field_mod_analysis_options
Configuration options for initial field-mod analysis.
performance.general.field_mod_analysis_options.field_mod_analysis : bool =
TrueDescription
Technical notes
Use additional analysis to infer properties that hold globally for the values stored in specific fields. Soundness is affected if there are instances where fields are not initialized: the analysis might exclude cases involving uninitialized (arbitrary) values. To identify such cases when the analysis is active, it is advisable to enable rules that detect uninitialized accesses, like FaultDetection-UninitializedVariable.
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness (see description) Precision: more Performance: less
performance.general.loop_counter_relations_analysis : bool =
TrueDescription
Whether an additional intra-procedural analysis for relations between loop counters and other routine-local variables values should be carried out.
This analysis can help avoiding false positives by, e.g., inferring thatx <= 2*iholds after the loop in the following code snippet.int array[30]; int x = 0; for(int i = 0; i < 10; ++i) { if (cond) { x++; } else { x += 2; } } array[x] = ...For checking whether the array accessarr[x]is out-of-bounds, the analysis can use the inferred info thatxis not larger than 20.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.query_timeout : int =
5000Description
Time limit in milliseconds for single SMT queries during abstract-interpretation-based analysis.
Set to 0 to disable the time limit completely (which may prevent the analysis from terminating).Relation to other options
An abstract-interpretation-based analysis has to be enabled for this option to have an effect. See the option performance.general.enhanced_analysis for details on how to enable such an analysis.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more (0 most) Performance: less (0 slowest, might run forever)
performance.general.routine_context_granularity : int =
4Description
The number of calling contexts to distinguish (between 1 and 8). A higher number of contexts allows a more precise analysis but typically also requires longer runtime and higher memory consumption. A context considers a routine when called from a certain caller, excluding the effects of other callers.Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.transfer_additional_results : bool =
FalseDescription
Refine base analysis results directly with abstract-interpretation-based analysis.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.general.union_find_points_to_analysis : bool =
FalseDescription
If true, union-find-based points-to analysis will run. Its results might speed up subsequent analyses by excluding cases of aliasing. Its results are also used to refine the call graph if semantics.advanced.use_coarse_callgraph is set toTrue.Technical notes
Activating this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: can increase precision Performance: Can speed up subsequent analyses, but requires initial analysis time
performance.pointer_analysis
Performance and precision options related to handling of pointers and references.
performance.pointer_analysis.cache_reset_threshold : int =
25000000Description
Threshold after which the internal BDD-based cache for points-to sets during pointer analysis is cleared (set to 0 to never clear it).Technical notes
Higher values of this option affect soundness, precision, and performance as follows.
Soundness: no impact Precision: no impact Performance: faster, requires more memory
performance.pointer_analysis.conservative_method_pointer_calls : bool =
FalseDescription
Precompute method pointer call targets using a conservative approximation. This can speed up analyses, but might result in less precise analysis results.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: less Performance: more
performance.pointer_analysis.process_subobject_casts : bool =
TrueDescription
Refine pointer target types for subobjects during dynamic casts.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
performance.pointer_analysis.use_abstract_interpretation_for_null : bool =
FalseDescription
Refine pointer analysis results with results from abstract-interpretation-based analysis to improve null pointer target propagation.Relation to other options
This option has no effect when performance.general.enhanced_analysis is enabled.
The following rules check for null pointer dereferences and are affected by this option.
- FaultDetection-NullPointerDereference
- CertC-EXP34
- CertC++-EXP34
- CWE-476
- MisraC-21.1
- MisraC2012Directive-4.1
- MisraC++-0.3.1
Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: less
semantics¶
Options that not only impact the runtime, memory, and precision of the analysis engine, but may also hide potential findings.
semantics.advanced
Options that affect analysis semantics and are only useful for specific language or project features
semantics.advanced.address_taken_functions_as_entries
Type: AddressTakenEntryPoints
Default:
'IGNORE'Description
Controls whether the analysis should treat functions as additional entry points if their address is taken and possibly passed to an external function. This is for example useful to handlepthread_create(..., &func, ...).
For a more fine-tuned approach to these cases, consider using EntryPoints to manually configure entry points.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for analyzing functions being only called from external code to which their address is passed Precision: adds more findings Performance: less
semantics.advanced.allow_function_pointer_signature_mismatch : bool =
FalseDescription
Allow usage of function pointer targets with mismatching signatures in indirect calls.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: depends Performance: less
semantics.advanced.apply_base_cast_fix : bool =
FalseDescription
Adapt base-class pointer type for certain casts on structured memory created by functions with custom placement new parameters or certainstdimplementations (e.g., MSVCstd::function).Relation to other options
The option semantics.pointer_analysis.use_pointer_filter has to be enabled for this option to have an effect.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: less or same Performance: may significantly increase analysis cost in time and space
semantics.advanced.apply_base_cast_split_fix : bool =
FalseDescription
Activate fix to properly handle base-class pointer casts combined with two indirections. This option is required for proper analysis of many shared_ptr implementations.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: less or same Performance: may significantly increase analysis cost in time and space
semantics.advanced.apply_placement_new_fix : bool =
FalseDescription
Handle objects created with placement new correctly.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: less Performance: slower
semantics.advanced.apply_virtual_call_this_adjustment : bool =
FalseDescription
Apply dynamic cast to the derived class type during virtual calls s.t. the type ofthisinside the called method is the actual type and not the base type.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: more Performance: no impact
semantics.advanced.assume_reference_address_nonnull : bool =
TrueDescription
Assume that addresses of C++ references are always non-null.
Since it is undefined behavior to initialize a reference with the dereference of a pointer that is potentially nullptr, assume that the address of a reference is never nullptr. Disabling this option may lead to more findings where the analysis cannot confirm the non-nullness.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: Suppresses valid findings for constructs like auto &r = *pwherepmay or must benullptrPrecision: Suppresses false positives where the analysis cannot be sure about the non-nullnessdepends Performance: Improved performance due to less false-positive data-flow propagationsdepends
semantics.advanced.char_is_like_void : bool =
FalseDescription
Treatchar*objects likevoid*when filtering for compatible types during pointer analysis, i.e.,char*then is universally compatible.Relation to other options
The option semantics.pointer_analysis.use_pointer_filter has to be enabled for this option to have an effect.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: depends on project Performance: less
semantics.advanced.compare_parameter_types : bool =
FalseDescription
Allow indirect calls in callgraph only if parameter types match.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: depends Performance: more
semantics.advanced.filter_enums_to_enumerator_range : bool =
TrueDescription
Assume that values of enum type are within the bounds of their enumerators. This assumption is, e.g., not true if enums are used for implementing flags.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness if the analysed code violates the assumption Precision: more Performance: faster
semantics.advanced.ignore_strings : bool =
FalseDescription
Exclude string literals from propagation as pointer targets.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: more Performance: more
semantics.advanced.treat_uncalled_functions_as_alive : bool =
FalseDescription
Assume that all uncalled functions are additional entry points.
Note that in most circumstances, not all uncalled functions are entry points. Enabling this option will then lead to false positives and longer analysis times. Hence, before using this option, consider using EntryPoints or manual drivers.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness if the analysed code violates the assumption Precision: depends Performance: depends
semantics.advanced.use_coarse_callgraph : bool =
FalseDescription
Overapproximate function pointer targets during callgraph generation.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: less Performance: more
semantics.advanced.use_symbolic_external_objects : bool =
FalseDescription
Create symbolic objects for unspecified external functions returning pointer types and for entry points with pointer parameters.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: less Performance: less
semantics.enable_filtering_heuristics : bool =
FalseDescription
Allow all analyses to use heuristics to exclude findings which are probably false positives.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: more Performance: more
semantics.exceptions
Options related to exceptions.
semantics.exceptions.base_class_for_throw_any : bauhaus.analysis.config.QualifiedName =
''Description
Specifies the base class of exceptions for external functions that can throw exceptions. If this option is not set, these functions can throw any exception. Per-function exception behavior can also be specified with Externals-FunctionSummary.Technical notes
Setting this option affects soundness, precision, and performance as follows.
Soundness: specifying the wrong base class is unsound Precision: more Performance: more
semantics.exceptions.ignore_exceptions : bool =
FalseDescription
Assume that no exception is thrown and do not track exceptions.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: more Performance: more
semantics.exceptions.missing_specifier_means_throw_any : bool =
FalseDescription
Treat external functions with neitherthrow(...), nornoexcept(...), nor an explicit exception configuration under configuration group Externals as if they were declared withnoexcept(true).
Disabling this options treats them as if they were declared withnoexcept(false).
Disabling this option leads to faster analysis, but might be unsound (depending on the language level).Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: depends Precision: more Performance: less
semantics.pointer_analysis
Options related to handling of pointers and references.
semantics.pointer_analysis.apply_compound_cast_fix : bool =
FalseDescription
Propagate pointer targets between fields during assignment of structured objects.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: less Performance: slower
semantics.pointer_analysis.assume_pointer_parameters_of_entries_nonnull : bool =
FalseDescription
Assume that pointer-typed parameters of entry functions are not null.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness if the analysed code violates the assumption Precision: depends Performance: no impact
semantics.pointer_analysis.restrict_all_integers_storing_pointers : bool =
FalseDescription
Assume that no integer variable can store a pointer.Relation to other options
The option semantics.pointer_analysis.use_pointer_filter has to be enabled for this option to have an effect.
If this option is enabled, the option semantics.pointer_analysis.restrict_bit_size_for_integers_storing_pointers has no effect.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness if the analysed code violates the assumption Precision: more Performance: more
semantics.pointer_analysis.restrict_bit_size_for_integers_storing_pointers : bool =
TrueDescription
Assume that an integer variable which stores a pointer has to have at least the bit size of (void*). This assumption might be violated for systems where pointers have different sizes, e.g. in connection with near and far pointers in older DOS systems.Relation to other options
The option semantics.pointer_analysis.use_pointer_filter has to be enabled for this option to have an effect.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness if the analysed code violates the assumption Precision: more Performance: more
semantics.pointer_analysis.summarize_simple_calls : bool =
TrueDescription
Attempt to improve the precision for calls where the return value computation in the called function is simple enough and returns one of the parameters or a subobject of such a parameter.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: no impact Precision: more Performance: more
semantics.pointer_analysis.untyped_heap_handling : bool =
FalseDescription
Update pointer targets of structured object fields when assigning untyped heap objects to structured objects. Disabling this option makes the pointer analysis for these situations unsound.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: required for soundness Precision: less Performance: less
semantics.pointer_analysis.use_integer_zero_as_null : bool =
FalseDescription
If true, integer zero is propagated similar to anullptrvalue in pointer analysis. This can lead to more findings in checks for null-pointer dereferences.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: more Precision: less Performance: less
semantics.pointer_analysis.use_pointer_filter : bool =
FalseDescription
Assume that objects of character, floating point or bool type cannot represent pointer targets.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness if the analysed code violates the assumption Precision: less Performance: more
semantics.pointer_analysis.use_type_filter : bool =
FalseDescription
Use type-based heuristics to filter out potential false positives in the pointer analysis and in all use-after-free checks. This option might introduce false negatives (i.e., missing pointer targets) e.g. in the context of explicit casts between pointers to integral types of different sizes.Technical notes
Enabling this option affects soundness, precision, and performance as follows.
Soundness: prevents soundness Precision: more Performance: more
Option Types¶
These types are used by options listed above:
AddressTakenEntryPoints¶
Enumerates the different options for dealing with address-taken functionsIGNORE
ALL
EXTERNALS
AxivionLoggingLevel¶
An enumeration.NONE
DEBUG
INFO
WARNING
ERROR
CRITICAL