From 58b1df6bb9bc509f397e0a57e0318b27beeb2823 Mon Sep 17 00:00:00 2001 From: Jules Villard Date: Thu, 27 Jun 2019 12:19:41 -0700 Subject: [PATCH] [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 --- infer/src/clang/cTrans.ml | 16 +++--- .../frontend/destructors/break_scope.cpp.dot | 50 +++++++++---------- .../destructors/continue_scope.cpp.dot | 50 +++++++++---------- .../codetoanalyze/cpp/pulse/temporaries.cpp | 13 ++++- .../methods/conversion_operator.cpp.dot | 40 +++++++-------- 5 files changed, 86 insertions(+), 83 deletions(-) diff --git a/infer/src/clang/cTrans.ml b/infer/src/clang/cTrans.ml index 1f2124cbb..07bef56b8 100644 --- a/infer/src/clang/cTrans.ml +++ b/infer/src/clang/cTrans.ml @@ -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 = diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/break_scope.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/break_scope.cpp.dot index 82152845b..54586bebf 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/break_scope.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/break_scope.cpp.dot @@ -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] diff --git a/infer/tests/codetoanalyze/cpp/frontend/destructors/continue_scope.cpp.dot b/infer/tests/codetoanalyze/cpp/frontend/destructors/continue_scope.cpp.dot index e1ae8b569..0cd3a8735 100644 --- a/infer/tests/codetoanalyze/cpp/frontend/destructors/continue_scope.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/frontend/destructors/continue_scope.cpp.dot @@ -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] diff --git a/infer/tests/codetoanalyze/cpp/pulse/temporaries.cpp b/infer/tests/codetoanalyze/cpp/pulse/temporaries.cpp index cb1882a5b..c2ff5e87d 100644 --- a/infer/tests/codetoanalyze/cpp/pulse/temporaries.cpp +++ b/infer/tests/codetoanalyze/cpp/pulse/temporaries.cpp @@ -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) {} } diff --git a/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot b/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot index ec938c337..e44f04707 100644 --- a/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot +++ b/infer/tests/codetoanalyze/cpp/shared/methods/conversion_operator.cpp.dot @@ -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]