@ -7,7 +7,6 @@
open ! IStd
open ! IStd
module F = Format
module F = Format
module AbstractAddress = PulseDomain . AbstractAddress
type actor = { access_expr : HilExp . AccessExpression . t ; location : Location . t } [ @@ deriving compare ]
type actor = { access_expr : HilExp . AccessExpression . t ; location : Location . t } [ @@ deriving compare ]
@ -15,8 +14,7 @@ type t =
| AccessToInvalidAddress of
| AccessToInvalidAddress of
{ invalidated_by : PulseInvalidation . t
{ invalidated_by : PulseInvalidation . t
; accessed_by : actor
; accessed_by : actor
; trace : PulseTrace . t
; trace : PulseTrace . t }
; address : AbstractAddress . t }
| StackVariableAddressEscape of { variable : Var . t ; location : Location . t }
| StackVariableAddressEscape of { variable : Var . t ; location : Location . t }
let get_location = function
let get_location = function
@ -25,13 +23,10 @@ let get_location = function
let get_message = function
let get_message = function
| AccessToInvalidAddress { accessed_by ; invalidated_by ; address ; trace } ->
| AccessToInvalidAddress { accessed_by ; invalidated_by ; trace } ->
let pp_debug_address f =
F . asprintf " `%a` accesses address %a%a past its lifetime " HilExp . AccessExpression . pp
if Config . debug_mode then F . fprintf f " (debug: %a) " AbstractAddress . pp address
in
F . asprintf " `%a` accesses address %a%a past its lifetime%t " HilExp . AccessExpression . pp
accessed_by . access_expr PulseTrace . pp_interesting_events trace PulseInvalidation . pp
accessed_by . access_expr PulseTrace . pp_interesting_events trace PulseInvalidation . pp
invalidated_by pp_debug_address
invalidated_by
| StackVariableAddressEscape { variable } ->
| StackVariableAddressEscape { variable } ->
let pp_var f var =
let pp_var f var =
if Var . is_cpp_temporary var then F . pp_print_string f " C++ temporary "
if Var . is_cpp_temporary var then F . pp_print_string f " C++ temporary "