Module Operator.Alarm
In the concrete, an alarm would correspond to an exception/panic due to a partial operator.
In the abstract, it corresponds to a (possible) error reported to the user.
Some transfer functions are partial: e.g. division by zero, loading at invalid addresses, arithmetic operation that overflow when overflowing is not permitted. When this situation happens in the analyzer, we raise an alarm.
TODO: we should add more information to better report what is the alarm. For instance, for overflows, we should tell what kind of operation created an overflow (add, sub, mul, div by -1, etc.), what kind of overflow (signed,unsigned, or unsigned + signed), etc.
TODO: We should raise the corresponding alarm as an exception in the concrete implementation too, to better document what is happening.
TODO: We should factorize and document each alarm.
Signed means that both operations were signed, the result was signed and did not fit in size bits.
Unsigned means that both operations were unsigned, the result was unsigned and did not fit in size bits.
Unsigned_signed means that the first operation was unsigned, the second signed, the result was unsigned and did not fit in size bits.
Operation that triggered the overflow warning.
type _ t = | Integer_overflow : {overflow_type : integer_overflow_type;size : Units.In_bits.t;operation : integer_overflow_operation;
} -> [ `Any ] t(*An integer operation on bitvector overflows its type.
*)| Integer_underflow : {overflow_type : integer_overflow_type;size : Units.In_bits.t;operation : integer_overflow_operation;
} -> [ `Any ] t(*An integer operation on bitvector underflows its type.
*)| Free_on_null_address : [ `Any ] t| Extract_offset : [ `Any ] t| Heap_typing : [ `Any ] t| Weak_type : [ `Any ] t| Weak_array_type : [ `Any ] t| Array_offset_access : [ `Any ] t| Load_param_nonptr : [ `Any ] t| Store_param_nonptr : [ `Any ] t| Load_param_nonptr_old : [ `Any ] t| Incompatible_function_pointer : [ `Any ] t| Incompatible_return_type : [ `Any ] t| Impure_store : [ `Any ] t| Manual_stub : [ `Any ] t| Ptr_arith : [ `Any ] t| Invalid_load_access : [ `Any ] t| Invalid_store_access : [ `Any ] t| Possibly_false_assertion : [ `Any ] t| Unresolved_dynamic_jump : [ `Any ] t| Weak_type_use : [ `Typing ] t| Typing_store : [ `Typing ] t
This is a list of all alarms that can be raised by Codex
val show : 'a t -> string