[clang] fix destructor placement for temporaries in conditionals

Summary:
The previous code would call the destructor for the C++ temporary
*before* the prune nodes, which then try to dereference it. Wrong.

Quick fix: don't destroy temporaries in conditionals.

Reviewed By: mbouaziz

Differential Revision: D16030735

fbshipit-source-id: e11abad58
master
Jules Villard 6 years ago committed by Facebook Github Bot
parent cb9ee662c8
commit 58b1df6bb9

@ -1611,7 +1611,7 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
create_prune_node context.procdesc ~branch ~negate_cond e ins sil_loc if_kind
in
(* this function translate cond without doing shortcircuit *)
let no_short_circuit_cond ~is_cmp =
let no_short_circuit_cond ~is_cmp cond =
L.(debug Capture Verbose) " No short-circuit condition@\n" ;
let res_trans_cond =
if is_null_stmt cond then
@ -1704,16 +1704,20 @@ module CTrans_funct (F : CModule_type.CFrontend) : CModule_type.CTranslation = s
| `LOr ->
short_circuit (if negate_cond then Binop.LAnd else Binop.LOr) s1 s2
| `LT | `GT | `LE | `GE | `EQ | `NE ->
no_short_circuit_cond ~is_cmp:true
no_short_circuit_cond ~is_cmp:true cond
| _ ->
no_short_circuit_cond ~is_cmp:false )
no_short_circuit_cond ~is_cmp:false cond )
| ParenExpr (_, [s], _) ->
(* condition can be wrapped in parenthesys *)
(* condition can be wrapped in parentheses *)
cond_trans ~if_kind ~negate_cond trans_state s
| UnaryOperator (_, [s], _, {uoi_kind= `LNot}) ->
cond_trans ~if_kind ~negate_cond:(not negate_cond) trans_state s
| _ ->
no_short_circuit_cond ~is_cmp:false
| ExprWithCleanups (_, [s], _, _)
(* Skip destructors of temporaries inside conditionals otherwise
we would destroy them before dereferencing them in the prune
nodes. A better fix probably exists. *)
| s ->
no_short_circuit_cond ~is_cmp:false s
and declStmt_in_condition_trans trans_state decl_stmt res_trans_cond =

@ -65,11 +65,11 @@ digraph cfg {
"test_do_while#break_scope#1068194121698893969.72aceeae2a95e32b3efdbdc08d127420_16" -> "test_do_while#break_scope#1068194121698893969.72aceeae2a95e32b3efdbdc08d127420_4" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_1" [label="1: Start break_scope::test_for\nFormals: b:_Bool\nLocals: x2:break_scope::X it:break_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator 0$?%__sil_tmp__temp_return_n$19:break_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$21:break_scope::iterator const x1:break_scope::X vector:break_scope::vec \n " color=yellow style=filled]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_1" [label="1: Start break_scope::test_for\nFormals: b:_Bool\nLocals: x2:break_scope::X it:break_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator 0$?%__sil_tmp__temp_return_n$19:break_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$22:break_scope::iterator const x1:break_scope::X vector:break_scope::vec \n " color=yellow style=filled]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_1" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_18" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_2" [label="2: Exit break_scope::test_for \n NULLIFY(&0$?%__sil_tmp__temp_return_n$19); [line 64, column 1]\n NULLIFY(&x2); [line 64, column 1]\n NULLIFY(&x1); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$9); [line 64, column 1]\n NULLIFY(&it); [line 64, column 1]\n NULLIFY(&vector); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$21); [line 64, column 1]\n " color=yellow style=filled]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_1" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_17" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_2" [label="2: Exit break_scope::test_for \n NULLIFY(&0$?%__sil_tmp__temp_return_n$19); [line 64, column 1]\n NULLIFY(&x2); [line 64, column 1]\n NULLIFY(&x1); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$9); [line 64, column 1]\n NULLIFY(&it); [line 64, column 1]\n NULLIFY(&vector); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$22); [line 64, column 1]\n " color=yellow style=filled]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_3" [label="3: Destruction(Scope) \n _=*&x2:break_scope::X [line 64, column 1]\n n$1=_fun_break_scope::X::~X(&x2:break_scope::X*) injected [line 64, column 1]\n _=*&vector:break_scope::vec [line 64, column 1]\n n$3=_fun_break_scope::vec::~vec(&vector:break_scope::vec*) injected [line 64, column 1]\n EXIT_SCOPE(_,_,n$1,n$3,vector,x2); [line 64, column 1]\n APPLY_ABSTRACTION; [line 64, column 1]\n " shape="box"]
@ -87,7 +87,7 @@ digraph cfg {
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_6" [label="6: + \n " ]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_6" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_6" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_7" [label="7: DeclStmt \n VARIABLE_DECLARED(it:break_scope::iterator); [line 57, column 8]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator); [line 57, column 22]\n _=*&vector:break_scope::vec [line 57, column 22]\n n$15=_fun_break_scope::vec::begin(&vector:break_scope::vec&,&0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator*) assign_last [line 57, column 22]\n n$16=_fun_break_scope::iterator::iterator(&it:break_scope::iterator*,&0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator&) [line 57, column 22]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator [line 57, column 35]\n n$11=_fun_break_scope::iterator::~iterator(&0$?%__sil_tmpSIL_materialize_temp__n$9:break_scope::iterator*) injected [line 57, column 35]\n EXIT_SCOPE(_,_,n$11,n$15,n$16,0$?%__sil_tmpSIL_materialize_temp__n$9); [line 57, column 35]\n APPLY_ABSTRACTION; [line 57, column 35]\n " shape="box"]
@ -96,48 +96,44 @@ digraph cfg {
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_8" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_6" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" [label="9: Destruction(temporaries cleanup) \n _=*&0$?%__sil_tmpSIL_materialize_temp__n$21:break_scope::iterator const [line 57, column 55]\n n$23=_fun_break_scope::iterator::~iterator(&0$?%__sil_tmpSIL_materialize_temp__n$21:break_scope::iterator const *) injected [line 57, column 55]\n EXIT_SCOPE(_,n$23,0$?%__sil_tmpSIL_materialize_temp__n$21); [line 57, column 55]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" [label="9: Call _fun_break_scope::iterator::operator!= \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$22:break_scope::iterator const ); [line 57, column 44]\n _=*&vector:break_scope::vec [line 57, column 44]\n n$25=_fun_break_scope::vec::end(&vector:break_scope::vec&,&0$?%__sil_tmpSIL_materialize_temp__n$22:break_scope::iterator*) assign_last [line 57, column 44]\n n$26=_fun_break_scope::iterator::operator!=(&it:break_scope::iterator&,&0$?%__sil_tmpSIL_materialize_temp__n$22:break_scope::iterator const &) [line 57, column 38]\n EXIT_SCOPE(_,n$25,0$?%__sil_tmpSIL_materialize_temp__n$22); [line 57, column 38]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_11" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_12" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" [label="10: Call _fun_break_scope::iterator::operator!= \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$21:break_scope::iterator const ); [line 57, column 44]\n _=*&vector:break_scope::vec [line 57, column 44]\n n$28=_fun_break_scope::vec::end(&vector:break_scope::vec&,&0$?%__sil_tmpSIL_materialize_temp__n$21:break_scope::iterator*) assign_last [line 57, column 44]\n n$29=_fun_break_scope::iterator::operator!=(&it:break_scope::iterator&,&0$?%__sil_tmpSIL_materialize_temp__n$21:break_scope::iterator const &) [line 57, column 38]\n EXIT_SCOPE(_,n$28); [line 57, column 38]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" [label="10: Prune (true branch, for loop) \n PRUNE(n$26, true); [line 57, column 38]\n EXIT_SCOPE(n$26); [line 57, column 38]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_9" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_11" [label="11: Prune (true branch, for loop) \n PRUNE(n$29, true); [line 57, column 38]\n EXIT_SCOPE(n$29); [line 57, column 38]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_13" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_10" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_14" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_11" [label="11: Prune (false branch, for loop) \n PRUNE(!n$26, false); [line 57, column 38]\n EXIT_SCOPE(n$26); [line 57, column 38]\n APPLY_ABSTRACTION; [line 57, column 38]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_11" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_14" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_11" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_15" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_12" [label="12: Prune (false branch, for loop) \n PRUNE(!n$29, false); [line 57, column 38]\n EXIT_SCOPE(n$29); [line 57, column 38]\n APPLY_ABSTRACTION; [line 57, column 38]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_11" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_5" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_12" [label="12: + \n " ]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_12" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_5" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_13" [label="13: + \n " ]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_12" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_8" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_13" [label="13: Prune (true branch, if) \n n$27=*&b:_Bool [line 58, column 9]\n PRUNE(n$27, true); [line 58, column 9]\n NULLIFY(&b); [line 58, column 9]\n EXIT_SCOPE(n$27,b); [line 58, column 9]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_13" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_8" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_14" [label="14: Prune (true branch, if) \n n$30=*&b:_Bool [line 58, column 9]\n PRUNE(n$30, true); [line 58, column 9]\n NULLIFY(&b); [line 58, column 9]\n EXIT_SCOPE(n$30,b); [line 58, column 9]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_13" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_16" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_14" [label="14: Prune (false branch, if) \n n$27=*&b:_Bool [line 58, column 9]\n PRUNE(!n$27, false); [line 58, column 9]\n EXIT_SCOPE(n$27); [line 58, column 9]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_14" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_17" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_15" [label="15: Prune (false branch, if) \n n$30=*&b:_Bool [line 58, column 9]\n PRUNE(!n$30, false); [line 58, column 9]\n EXIT_SCOPE(n$30); [line 58, column 9]\n " shape="invhouse"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_14" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_12" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_15" [label="15: Destruction(break) \n _=*&x1:break_scope::X [line 60, column 7]\n n$29=_fun_break_scope::X::~X(&x1:break_scope::X*) injected [line 60, column 7]\n EXIT_SCOPE(_,n$29,x1); [line 60, column 7]\n APPLY_ABSTRACTION; [line 60, column 7]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_15" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_13" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_16" [label="16: Destruction(break) \n _=*&x1:break_scope::X [line 60, column 7]\n n$32=_fun_break_scope::X::~X(&x1:break_scope::X*) injected [line 60, column 7]\n EXIT_SCOPE(_,n$32,x1); [line 60, column 7]\n APPLY_ABSTRACTION; [line 60, column 7]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_15" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_5" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_16" [label="16: DeclStmt \n VARIABLE_DECLARED(x1:break_scope::X); [line 59, column 7]\n n$31=_fun_break_scope::X::X(&x1:break_scope::X*) [line 59, column 9]\n EXIT_SCOPE(n$31); [line 59, column 9]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_16" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_5" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_17" [label="17: DeclStmt \n VARIABLE_DECLARED(x1:break_scope::X); [line 59, column 7]\n n$34=_fun_break_scope::X::X(&x1:break_scope::X*) [line 59, column 9]\n EXIT_SCOPE(n$34); [line 59, column 9]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_16" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_15" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_17" [label="17: DeclStmt \n VARIABLE_DECLARED(vector:break_scope::vec); [line 56, column 3]\n n$35=_fun_break_scope::vec::vec(&vector:break_scope::vec*) [line 56, column 7]\n EXIT_SCOPE(n$35); [line 56, column 7]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_17" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_16" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_18" [label="18: DeclStmt \n VARIABLE_DECLARED(vector:break_scope::vec); [line 56, column 3]\n n$38=_fun_break_scope::vec::vec(&vector:break_scope::vec*) [line 56, column 7]\n EXIT_SCOPE(n$38); [line 56, column 7]\n " shape="box"]
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_18" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_7" ;
"test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_17" -> "test_for#break_scope#12580813866832058675.4c62e98ea10322d216af5dcd2cfbde37_7" ;
"test_for_range#break_scope#2115859683356214080.ad34c277f8d086eb0a22c75fc80fb235_1" [label="1: Start break_scope::test_for_range\nFormals: b:_Bool\nLocals: __end1:break_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$10:break_scope::iterator __begin1:break_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$19:break_scope::iterator 0$?%__sil_tmp__temp_return_n$30:break_scope::iterator x2:break_scope::X x:break_scope::X 0$?%__sil_tmpSIL_materialize_temp__n$43:break_scope::X const __range1:break_scope::vec& x1:break_scope::X vector:break_scope::vec \n " color=yellow style=filled]

@ -66,11 +66,11 @@ digraph cfg {
"test_do_while#continue_scope#8999676231552324448.9fe455097ef7e757730530e9e7c09864_16" -> "test_do_while#continue_scope#8999676231552324448.9fe455097ef7e757730530e9e7c09864_4" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_1" [label="1: Start continue_scope::test_for\nFormals: b:_Bool\nLocals: x2:continue_scope::X it:continue_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator 0$?%__sil_tmp__temp_return_n$19:continue_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$21:continue_scope::iterator const x1:continue_scope::X vector:continue_scope::vec \n " color=yellow style=filled]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_1" [label="1: Start continue_scope::test_for\nFormals: b:_Bool\nLocals: x2:continue_scope::X it:continue_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator 0$?%__sil_tmp__temp_return_n$19:continue_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$22:continue_scope::iterator const x1:continue_scope::X vector:continue_scope::vec \n " color=yellow style=filled]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_1" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_18" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_2" [label="2: Exit continue_scope::test_for \n NULLIFY(&0$?%__sil_tmp__temp_return_n$19); [line 64, column 1]\n NULLIFY(&x2); [line 64, column 1]\n NULLIFY(&x1); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$9); [line 64, column 1]\n NULLIFY(&it); [line 64, column 1]\n NULLIFY(&vector); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$21); [line 64, column 1]\n " color=yellow style=filled]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_1" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_17" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_2" [label="2: Exit continue_scope::test_for \n NULLIFY(&0$?%__sil_tmp__temp_return_n$19); [line 64, column 1]\n NULLIFY(&x2); [line 64, column 1]\n NULLIFY(&x1); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$9); [line 64, column 1]\n NULLIFY(&it); [line 64, column 1]\n NULLIFY(&vector); [line 64, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$22); [line 64, column 1]\n " color=yellow style=filled]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_3" [label="3: Destruction(Scope) \n _=*&x2:continue_scope::X [line 64, column 1]\n n$1=_fun_continue_scope::X::~X(&x2:continue_scope::X*) injected [line 64, column 1]\n _=*&vector:continue_scope::vec [line 64, column 1]\n n$3=_fun_continue_scope::vec::~vec(&vector:continue_scope::vec*) injected [line 64, column 1]\n EXIT_SCOPE(_,_,n$1,n$3,vector,x2); [line 64, column 1]\n APPLY_ABSTRACTION; [line 64, column 1]\n " shape="box"]
@ -88,7 +88,7 @@ digraph cfg {
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_6" [label="6: + \n " ]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_6" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_6" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_7" [label="7: DeclStmt \n VARIABLE_DECLARED(it:continue_scope::iterator); [line 57, column 8]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator); [line 57, column 22]\n _=*&vector:continue_scope::vec [line 57, column 22]\n n$15=_fun_continue_scope::vec::begin(&vector:continue_scope::vec&,&0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator*) assign_last [line 57, column 22]\n n$16=_fun_continue_scope::iterator::iterator(&it:continue_scope::iterator*,&0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator&) [line 57, column 22]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator [line 57, column 35]\n n$11=_fun_continue_scope::iterator::~iterator(&0$?%__sil_tmpSIL_materialize_temp__n$9:continue_scope::iterator*) injected [line 57, column 35]\n EXIT_SCOPE(_,_,n$11,n$15,n$16,0$?%__sil_tmpSIL_materialize_temp__n$9); [line 57, column 35]\n APPLY_ABSTRACTION; [line 57, column 35]\n " shape="box"]
@ -97,48 +97,44 @@ digraph cfg {
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_8" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_6" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" [label="9: Destruction(temporaries cleanup) \n _=*&0$?%__sil_tmpSIL_materialize_temp__n$21:continue_scope::iterator const [line 57, column 55]\n n$23=_fun_continue_scope::iterator::~iterator(&0$?%__sil_tmpSIL_materialize_temp__n$21:continue_scope::iterator const *) injected [line 57, column 55]\n EXIT_SCOPE(_,n$23,0$?%__sil_tmpSIL_materialize_temp__n$21); [line 57, column 55]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" [label="9: Call _fun_continue_scope::iterator::operator!= \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$22:continue_scope::iterator const ); [line 57, column 44]\n _=*&vector:continue_scope::vec [line 57, column 44]\n n$25=_fun_continue_scope::vec::end(&vector:continue_scope::vec&,&0$?%__sil_tmpSIL_materialize_temp__n$22:continue_scope::iterator*) assign_last [line 57, column 44]\n n$26=_fun_continue_scope::iterator::operator!=(&it:continue_scope::iterator&,&0$?%__sil_tmpSIL_materialize_temp__n$22:continue_scope::iterator const &) [line 57, column 38]\n EXIT_SCOPE(_,n$25,0$?%__sil_tmpSIL_materialize_temp__n$22); [line 57, column 38]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_11" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_12" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" [label="10: Call _fun_continue_scope::iterator::operator!= \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$21:continue_scope::iterator const ); [line 57, column 44]\n _=*&vector:continue_scope::vec [line 57, column 44]\n n$28=_fun_continue_scope::vec::end(&vector:continue_scope::vec&,&0$?%__sil_tmpSIL_materialize_temp__n$21:continue_scope::iterator*) assign_last [line 57, column 44]\n n$29=_fun_continue_scope::iterator::operator!=(&it:continue_scope::iterator&,&0$?%__sil_tmpSIL_materialize_temp__n$21:continue_scope::iterator const &) [line 57, column 38]\n EXIT_SCOPE(_,n$28); [line 57, column 38]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" [label="10: Prune (true branch, for loop) \n PRUNE(n$26, true); [line 57, column 38]\n EXIT_SCOPE(n$26); [line 57, column 38]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_9" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_11" [label="11: Prune (true branch, for loop) \n PRUNE(n$29, true); [line 57, column 38]\n EXIT_SCOPE(n$29); [line 57, column 38]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_13" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_10" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_14" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_11" [label="11: Prune (false branch, for loop) \n PRUNE(!n$26, false); [line 57, column 38]\n EXIT_SCOPE(n$26); [line 57, column 38]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_11" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_14" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_11" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_15" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_12" [label="12: Prune (false branch, for loop) \n PRUNE(!n$29, false); [line 57, column 38]\n EXIT_SCOPE(n$29); [line 57, column 38]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_11" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_5" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_12" [label="12: + \n " ]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_12" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_5" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_13" [label="13: + \n " ]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_12" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_8" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_13" [label="13: Prune (true branch, if) \n n$27=*&b:_Bool [line 58, column 9]\n PRUNE(n$27, true); [line 58, column 9]\n EXIT_SCOPE(n$27); [line 58, column 9]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_13" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_8" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_14" [label="14: Prune (true branch, if) \n n$30=*&b:_Bool [line 58, column 9]\n PRUNE(n$30, true); [line 58, column 9]\n EXIT_SCOPE(n$30); [line 58, column 9]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_13" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_16" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_14" [label="14: Prune (false branch, if) \n n$27=*&b:_Bool [line 58, column 9]\n PRUNE(!n$27, false); [line 58, column 9]\n EXIT_SCOPE(n$27); [line 58, column 9]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_14" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_17" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_15" [label="15: Prune (false branch, if) \n n$30=*&b:_Bool [line 58, column 9]\n PRUNE(!n$30, false); [line 58, column 9]\n EXIT_SCOPE(n$30); [line 58, column 9]\n " shape="invhouse"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_14" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_12" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_15" [label="15: Destruction(continue) \n _=*&x1:continue_scope::X [line 60, column 7]\n n$29=_fun_continue_scope::X::~X(&x1:continue_scope::X*) injected [line 60, column 7]\n EXIT_SCOPE(_,n$29,x1); [line 60, column 7]\n APPLY_ABSTRACTION; [line 60, column 7]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_15" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_13" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_16" [label="16: Destruction(continue) \n _=*&x1:continue_scope::X [line 60, column 7]\n n$32=_fun_continue_scope::X::~X(&x1:continue_scope::X*) injected [line 60, column 7]\n EXIT_SCOPE(_,n$32,x1); [line 60, column 7]\n APPLY_ABSTRACTION; [line 60, column 7]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_15" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_8" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_16" [label="16: DeclStmt \n VARIABLE_DECLARED(x1:continue_scope::X); [line 59, column 7]\n n$31=_fun_continue_scope::X::X(&x1:continue_scope::X*) [line 59, column 9]\n EXIT_SCOPE(n$31); [line 59, column 9]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_16" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_8" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_17" [label="17: DeclStmt \n VARIABLE_DECLARED(x1:continue_scope::X); [line 59, column 7]\n n$34=_fun_continue_scope::X::X(&x1:continue_scope::X*) [line 59, column 9]\n EXIT_SCOPE(n$34); [line 59, column 9]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_16" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_15" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_17" [label="17: DeclStmt \n VARIABLE_DECLARED(vector:continue_scope::vec); [line 56, column 3]\n n$35=_fun_continue_scope::vec::vec(&vector:continue_scope::vec*) [line 56, column 7]\n EXIT_SCOPE(n$35); [line 56, column 7]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_17" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_16" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_18" [label="18: DeclStmt \n VARIABLE_DECLARED(vector:continue_scope::vec); [line 56, column 3]\n n$38=_fun_continue_scope::vec::vec(&vector:continue_scope::vec*) [line 56, column 7]\n EXIT_SCOPE(n$38); [line 56, column 7]\n " shape="box"]
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_18" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_7" ;
"test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_17" -> "test_for#continue_scope#10203739842900202560.4cb2db668430574619fdf529fdd4af8c_7" ;
"test_for_range#continue_scope#9937708960633325401.fa75d7368d8f711ae7e040a8b2ae1442_1" [label="1: Start continue_scope::test_for_range\nFormals: b:_Bool\nLocals: __end1:continue_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$10:continue_scope::iterator __begin1:continue_scope::iterator 0$?%__sil_tmpSIL_materialize_temp__n$19:continue_scope::iterator 0$?%__sil_tmp__temp_return_n$30:continue_scope::iterator x2:continue_scope::X x:continue_scope::X 0$?%__sil_tmpSIL_materialize_temp__n$43:continue_scope::X const __range1:continue_scope::vec& x1:continue_scope::X vector:continue_scope::vec \n " color=yellow style=filled]

@ -65,7 +65,18 @@ void temporary_in_ternary_ok() {
}
}
void temporary_in_condition_ok() {
void temporary_in_if_condition_ok() {
if (A(4).s_) {
}
if (true && A(4).s_ && true) {
}
}
void temporary_in_while_condition_ok() {
while (A(4).s_) {
}
while (true && A(4).s_ && true) {}
}

@ -120,11 +120,11 @@ digraph cfg {
"branch_no_div#conversion_operator#18429458682592639842.4c7cf0cc20989fd2ea431840e11b2521_10" -> "branch_no_div#conversion_operator#18429458682592639842.4c7cf0cc20989fd2ea431840e11b2521_5" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_1" [label="1: Start conversion_operator::y_branch_div0\nFormals: \nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X const 0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const 0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X v:int 0$?%__sil_tmpSIL_materialize_temp__n$28:conversion_operator::X const 0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X y:conversion_operator::Y \n " color=yellow style=filled]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_1" [label="1: Start conversion_operator::y_branch_div0\nFormals: \nLocals: 0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X const 0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X 0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const 0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X v:int 0$?%__sil_tmpSIL_materialize_temp__n$23:conversion_operator::X const 0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X y:conversion_operator::Y \n " color=yellow style=filled]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_1" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_13" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_2" [label="2: Exit conversion_operator::y_branch_div0 \n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$14); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$13); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$28); [line 50, column 1]\n NULLIFY(&y); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$27); [line 50, column 1]\n " color=yellow style=filled]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_1" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_12" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_2" [label="2: Exit conversion_operator::y_branch_div0 \n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$1); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$14); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$23); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$0); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$13); [line 50, column 1]\n NULLIFY(&y); [line 50, column 1]\n NULLIFY(&0$?%__sil_tmpSIL_materialize_temp__n$22); [line 50, column 1]\n " color=yellow style=filled]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_3" [label="3: Return Stmt \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X); [line 49, column 10]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X const ); [line 49, column 13]\n _=*&y:conversion_operator::Y [line 49, column 13]\n n$9=_fun_conversion_operator::Y::operator_X(&y:conversion_operator::Y&,&0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X*) assign_last [line 49, column 13]\n n$10=_fun_conversion_operator::X::X(&0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X*,&0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X const &) [line 49, column 10]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X [line 49, column 10]\n n$12=_fun_conversion_operator::X::operator_int(&0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X&) [line 49, column 10]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X const [line 49, column 13]\n n$3=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$1:conversion_operator::X const *) injected [line 49, column 13]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X [line 49, column 13]\n n$5=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$0:conversion_operator::X*) injected [line 49, column 13]\n *&return:int=n$12 [line 49, column 3]\n EXIT_SCOPE(_,_,_,_,n$3,n$5,n$9,n$10,n$12,y,0$?%__sil_tmpSIL_materialize_temp__n$0,0$?%__sil_tmpSIL_materialize_temp__n$1); [line 49, column 3]\n APPLY_ABSTRACTION; [line 49, column 3]\n " shape="box"]
@ -135,43 +135,39 @@ digraph cfg {
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_4" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_3" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" [label="5: Destruction(temporaries cleanup) \n _=*&0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const [line 45, column 10]\n n$16=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const *) injected [line 45, column 10]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X [line 45, column 10]\n n$18=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X*) injected [line 45, column 10]\n EXIT_SCOPE(_,_,n$16,n$18,0$?%__sil_tmpSIL_materialize_temp__n$13,0$?%__sil_tmpSIL_materialize_temp__n$14); [line 45, column 10]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" [label="5: Call _fun_conversion_operator::X::operator_bool \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X); [line 45, column 7]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const ); [line 45, column 10]\n _=*&y:conversion_operator::Y [line 45, column 10]\n n$17=_fun_conversion_operator::Y::operator_X(&y:conversion_operator::Y&,&0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X*) assign_last [line 45, column 10]\n n$18=_fun_conversion_operator::X::X(&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X*,&0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const &) [line 45, column 7]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X [line 45, column 7]\n n$20=_fun_conversion_operator::X::operator_bool(&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X&) [line 45, column 7]\n EXIT_SCOPE(_,_,n$17,n$18,0$?%__sil_tmpSIL_materialize_temp__n$13,0$?%__sil_tmpSIL_materialize_temp__n$14); [line 45, column 7]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_6" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_7" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_8" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_6" [label="6: Call _fun_conversion_operator::X::operator_bool \n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X); [line 45, column 7]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const ); [line 45, column 10]\n _=*&y:conversion_operator::Y [line 45, column 10]\n n$22=_fun_conversion_operator::Y::operator_X(&y:conversion_operator::Y&,&0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X*) assign_last [line 45, column 10]\n n$23=_fun_conversion_operator::X::X(&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X*,&0$?%__sil_tmpSIL_materialize_temp__n$14:conversion_operator::X const &) [line 45, column 7]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X [line 45, column 7]\n n$25=_fun_conversion_operator::X::operator_bool(&0$?%__sil_tmpSIL_materialize_temp__n$13:conversion_operator::X&) [line 45, column 7]\n EXIT_SCOPE(_,_,n$22,n$23); [line 45, column 7]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_6" [label="6: Prune (true branch, if) \n PRUNE(n$20, true); [line 45, column 7]\n EXIT_SCOPE(n$20); [line 45, column 7]\n " shape="invhouse"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_6" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_7" [label="7: Prune (true branch, if) \n PRUNE(n$25, true); [line 45, column 7]\n EXIT_SCOPE(n$25); [line 45, column 7]\n " shape="invhouse"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_6" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_9" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_7" [label="7: Prune (false branch, if) \n PRUNE(!n$20, false); [line 45, column 7]\n EXIT_SCOPE(n$20); [line 45, column 7]\n " shape="invhouse"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_7" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_10" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_8" [label="8: Prune (false branch, if) \n PRUNE(!n$25, false); [line 45, column 7]\n EXIT_SCOPE(n$25); [line 45, column 7]\n " shape="invhouse"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_7" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_4" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_8" [label="8: Return Stmt \n n$21=*&v:int [line 47, column 16]\n *&return:int=(1 / n$21) [line 47, column 5]\n NULLIFY(&v); [line 47, column 5]\n EXIT_SCOPE(n$21,v); [line 47, column 5]\n APPLY_ABSTRACTION; [line 47, column 5]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_8" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_4" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_9" [label="9: Return Stmt \n n$26=*&v:int [line 47, column 16]\n *&return:int=(1 / n$26) [line 47, column 5]\n NULLIFY(&v); [line 47, column 5]\n EXIT_SCOPE(n$26,v); [line 47, column 5]\n APPLY_ABSTRACTION; [line 47, column 5]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_8" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_2" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_9" [label="9: DeclStmt \n VARIABLE_DECLARED(v:int); [line 46, column 5]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X); [line 46, column 13]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$23:conversion_operator::X const ); [line 46, column 16]\n _=*&y:conversion_operator::Y [line 46, column 16]\n n$31=_fun_conversion_operator::Y::operator_X(&y:conversion_operator::Y&,&0$?%__sil_tmpSIL_materialize_temp__n$23:conversion_operator::X*) assign_last [line 46, column 16]\n n$32=_fun_conversion_operator::X::X(&0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X*,&0$?%__sil_tmpSIL_materialize_temp__n$23:conversion_operator::X const &) [line 46, column 13]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X [line 46, column 13]\n n$34=_fun_conversion_operator::X::operator_int(&0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X&) [line 46, column 13]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$23:conversion_operator::X const [line 46, column 16]\n n$25=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$23:conversion_operator::X const *) injected [line 46, column 16]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X [line 46, column 16]\n n$27=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$22:conversion_operator::X*) injected [line 46, column 16]\n *&v:int=n$34 [line 46, column 5]\n EXIT_SCOPE(_,_,_,_,n$25,n$27,n$31,n$32,n$34,0$?%__sil_tmpSIL_materialize_temp__n$22,y,0$?%__sil_tmpSIL_materialize_temp__n$23); [line 46, column 5]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_9" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_2" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_10" [label="10: DeclStmt \n VARIABLE_DECLARED(v:int); [line 46, column 5]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X); [line 46, column 13]\n VARIABLE_DECLARED(0$?%__sil_tmpSIL_materialize_temp__n$28:conversion_operator::X const ); [line 46, column 16]\n _=*&y:conversion_operator::Y [line 46, column 16]\n n$36=_fun_conversion_operator::Y::operator_X(&y:conversion_operator::Y&,&0$?%__sil_tmpSIL_materialize_temp__n$28:conversion_operator::X*) assign_last [line 46, column 16]\n n$37=_fun_conversion_operator::X::X(&0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X*,&0$?%__sil_tmpSIL_materialize_temp__n$28:conversion_operator::X const &) [line 46, column 13]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X [line 46, column 13]\n n$39=_fun_conversion_operator::X::operator_int(&0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X&) [line 46, column 13]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$28:conversion_operator::X const [line 46, column 16]\n n$30=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$28:conversion_operator::X const *) injected [line 46, column 16]\n _=*&0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X [line 46, column 16]\n n$32=_fun_conversion_operator::X::~X(&0$?%__sil_tmpSIL_materialize_temp__n$27:conversion_operator::X*) injected [line 46, column 16]\n *&v:int=n$39 [line 46, column 5]\n EXIT_SCOPE(_,_,_,_,n$30,n$32,n$36,n$37,n$39,0$?%__sil_tmpSIL_materialize_temp__n$27,y,0$?%__sil_tmpSIL_materialize_temp__n$28); [line 46, column 5]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_9" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_8" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_10" [label="10: BinaryOperatorStmt: Assign \n *&y.b:int=1 [line 44, column 3]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_10" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_9" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_11" [label="11: BinaryOperatorStmt: Assign \n *&y.b:int=1 [line 44, column 3]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_10" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_5" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_11" [label="11: BinaryOperatorStmt: Assign \n *&y.f:int=0 [line 43, column 3]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_11" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_6" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_12" [label="12: BinaryOperatorStmt: Assign \n *&y.f:int=0 [line 43, column 3]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_11" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_10" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_12" [label="12: DeclStmt \n VARIABLE_DECLARED(y:conversion_operator::Y); [line 42, column 3]\n n$37=_fun_conversion_operator::Y::Y(&y:conversion_operator::Y*) [line 42, column 5]\n EXIT_SCOPE(n$37); [line 42, column 5]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_12" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_11" ;
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_13" [label="13: DeclStmt \n VARIABLE_DECLARED(y:conversion_operator::Y); [line 42, column 3]\n n$42=_fun_conversion_operator::Y::Y(&y:conversion_operator::Y*) [line 42, column 5]\n EXIT_SCOPE(n$42); [line 42, column 5]\n " shape="box"]
"y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_13" -> "y_branch_div0#conversion_operator#7606471872775172252.4a93f184f35976e9e7dc6663bc4d47a2_12" ;
"operator_int#X#conversion_operator#(11584960464019118495).bbe1ab264905e56e75a1b45ae475ffe0_1" [label="1: Start conversion_operator::X::operator_int\nFormals: this:conversion_operator::X*\nLocals: \n " color=yellow style=filled]

Loading…
Cancel
Save