You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

812 lines
54 KiB

/* @generated */
digraph cfg {
"getValue.faa0c7b1433b0c97fcdc15fa47c8180f_1" [label="1: Start getValue\nFormals: \nLocals: \n " color=yellow style=filled]
"getValue.faa0c7b1433b0c97fcdc15fa47c8180f_1" -> "getValue.faa0c7b1433b0c97fcdc15fa47c8180f_3" ;
"getValue.faa0c7b1433b0c97fcdc15fa47c8180f_2" [label="2: Exit getValue \n " color=yellow style=filled]
"getValue.faa0c7b1433b0c97fcdc15fa47c8180f_3" [label="3: Return Stmt \n *&return:int=1 [line 134, column 18]\n " shape="box"]
"getValue.faa0c7b1433b0c97fcdc15fa47c8180f_3" -> "getValue.faa0c7b1433b0c97fcdc15fa47c8180f_2" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_1" [label="1: Start switch_gnu_range\nFormals: c:char\nLocals: i:int \n " color=yellow style=filled]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_1" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_5" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_2" [label="2: Exit switch_gnu_range \n " color=yellow style=filled]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_3" [label="3: Return Stmt \n n$0=*&i:int [line 209, column 10]\n " shape="box"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_3" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_4" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_4" [label="4: Return Stmt \n *&return:int=n$0 [line 209, column 3]\n " shape="box"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_4" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_2" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_5" [label="5: SwitchStmt \n n$1=*&c:char [line 199, column 11]\n " shape="box"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_5" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_10" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_5" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_11" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_6" [label="6: BinaryOperatorStmt: Assign \n n$3=*&c:char [line 206, column 16]\n n$4=_fun_atoi(n$3:int) [line 206, column 11]\n *&i:int=n$4 [line 206, column 7]\n " shape="box"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_6" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_3" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_7" [label="7: Return Stmt \n *&return:int=0 [line 201, column 7]\n " shape="box"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_7" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_2" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_8" [label="8: Prune (true branch, switch) \n PRUNE((n$1 == 48), true); [line 203, column 5]\n " shape="invhouse"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_8" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_6" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_9" [label="9: Prune (false branch, switch) \n PRUNE(!(n$1 == 48), false); [line 203, column 5]\n " shape="invhouse"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_9" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_3" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_10" [label="10: Prune (true branch, switch) \n PRUNE((n$1 == 97), true); [line 200, column 5]\n " shape="invhouse"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_10" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_7" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_11" [label="11: Prune (false branch, switch) \n PRUNE(!(n$1 == 97), false); [line 200, column 5]\n " shape="invhouse"]
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_11" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_8" ;
"switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_11" -> "switch_gnu_range.fe09b2428ff32c71bce6cc22d05f5102_9" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_1" [label="1: Start test_switch1\nFormals: \nLocals: x:int value:int \n " color=yellow style=filled]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_1" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_22" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_2" [label="2: Exit test_switch1 \n " color=yellow style=filled]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_3" [label="3: Return Stmt \n *&return:int=0 [line 33, column 3]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_3" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_2" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_4" [label="4: + \n " ]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_4" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_5" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_5" [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 13, column 10]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_5" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_6" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_5" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_7" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_6" [label="6: Prune (true branch, while) \n PRUNE((n$0 < 10), true); [line 13, column 10]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_6" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_9" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_7" [label="7: Prune (false branch, while) \n PRUNE(!(n$0 < 10), false); [line 13, column 10]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_7" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_3" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_8" [label="8: Call _fun_printf \n n$1=_fun_printf(\"(after_switch)HELLO WORLD!\":char*) [line 31, column 5]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_8" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_4" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_9" [label="9: SwitchStmt \n n$2=*&value:int [line 14, column 13]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_9" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_20" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_9" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_21" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_10" [label="10: Call _fun_printf \n n$4=_fun_printf(\"(2/def)HELLO WORLD!\":char*) [line 28, column 9]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_10" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_4" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_11" [label="11: Call _fun_printf \n n$6=_fun_printf(\"(1)HELLO WORLD!\":char*) [line 24, column 9]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_11" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_4" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_12" [label="12: Call _fun_printf \n n$8=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 21, column 9]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_12" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_8" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_13" [label="13: BinaryOperatorStmt: Assign \n n$9=*&value:int [line 19, column 11]\n *&x:int=(n$9 + 1) [line 19, column 7]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_13" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_12" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_14" [label="14: Call _fun_printf \n n$10=_fun_printf(\"(out)HELLO WORLD!\":char*) [line 18, column 7]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_14" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_13" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_15" [label="15: DeclStmt \n VARIABLE_DECLARED(x:int); [line 17, column 7]\n *&x:int=1 [line 17, column 7]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_15" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_14" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_16" [label="16: Prune (true branch, switch) \n PRUNE((n$2 == 2), true); [line 26, column 7]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_16" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_10" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_17" [label="17: Prune (false branch, switch) \n PRUNE(!(n$2 == 2), false); [line 26, column 7]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_17" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_10" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_18" [label="18: Prune (true branch, switch) \n PRUNE((n$2 == 1), true); [line 23, column 7]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_18" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_11" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_19" [label="19: Prune (false branch, switch) \n PRUNE(!(n$2 == 1), false); [line 23, column 7]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_19" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_16" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_19" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_17" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_20" [label="20: Prune (true branch, switch) \n PRUNE((n$2 == 0), true); [line 20, column 7]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_20" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_12" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_21" [label="21: Prune (false branch, switch) \n PRUNE(!(n$2 == 0), false); [line 20, column 7]\n " shape="invhouse"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_21" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_18" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_21" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_19" ;
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_22" [label="22: DeclStmt \n VARIABLE_DECLARED(value:int); [line 11, column 3]\n *&value:int=0 [line 11, column 3]\n " shape="box"]
"test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_22" -> "test_switch1.7c92c7e14d1a0ee28a9ab29b22df5d3f_4" ;
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_1" [label="1: Start test_switch10\nFormals: \nLocals: value:int \n " color=yellow style=filled]
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_1" -> "test_switch10.8a4170d3888102a2491712a5ad55ad8d_5" ;
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_2" [label="2: Exit test_switch10 \n " color=yellow style=filled]
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_3" [label="3: Return Stmt \n *&return:int=0 [line 185, column 3]\n " shape="box"]
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_3" -> "test_switch10.8a4170d3888102a2491712a5ad55ad8d_2" ;
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_4" [label="4: SwitchStmt \n *&value:int=7 [line 184, column 11]\n n$0=*&value:int [line 184, column 11]\n " shape="box"]
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_4" -> "test_switch10.8a4170d3888102a2491712a5ad55ad8d_3" ;
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_5" [label="5: DeclStmt \n VARIABLE_DECLARED(value:int); [line 183, column 3]\n *&value:int=0 [line 183, column 3]\n " shape="box"]
"test_switch10.8a4170d3888102a2491712a5ad55ad8d_5" -> "test_switch10.8a4170d3888102a2491712a5ad55ad8d_4" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_1" [label="1: Start test_switch11\nFormals: \nLocals: value:int \n " color=yellow style=filled]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_1" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_14" ;
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_2" [label="2: Exit test_switch11 \n " color=yellow style=filled]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_3" [label="3: Return Stmt \n *&return:int=0 [line 194, column 3]\n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_3" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_2" ;
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_4" [label="4: + \n " ]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_4" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_10" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_5" [label="5: BinaryOperatorStmt: EQ \n n$0=*&value:int [line 190, column 20]\n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_5" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_6" ;
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_5" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_7" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_6" [label="6: Prune (true branch, boolean exp) \n PRUNE((n$0 == 0), true); [line 190, column 20]\n " shape="invhouse"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_6" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_8" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_7" [label="7: Prune (false branch, boolean exp) \n PRUNE(!(n$0 == 0), false); [line 190, column 20]\n " shape="invhouse"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_7" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_9" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_8" [label="8: ConditionalStmt Branch \n *&value:int=7 [line 190, column 20]\n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_8" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_4" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_9" [label="9: ConditionalStmt Branch \n *&value:int=9 [line 190, column 20]\n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_9" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_4" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_10" [label="10: SwitchStmt \n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_10" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_12" ;
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_10" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_13" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_11" [label="11: Call _fun_printf \n n$1=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 192, column 7]\n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_11" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_3" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_12" [label="12: Prune (true branch, switch) \n PRUNE((&value == 0), true); [line 191, column 5]\n " shape="invhouse"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_12" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_11" ;
[clang] fix bad interaction between ConditionalOperator and initializers Summary: This is several inter-connected changes together to keep the tests happy. The ConditionalOperator `b?t:e` is translated by first creating a placeholder variable to temporarily store the result of the evaluation in each branch, then the real thing we want to assign to reads that variable. But, there are situations where that changes the semantics of the expression, namely when the value created is a struct on the stack (eg, a C++ temporary). This is because in SIL we cannot assign the *address* of a program variable, only its contents, so by the time we're out of the conditional operator we cannot set the struct value correctly anymore: we can only set its content, which we did, but that results in a "shifted" struct value that is one dereference away from where it should be. So a batch of changes concern `conditionalOperator_trans`: - instead of systematically creating a temporary for the conditional, use the `trans_state.var_exp_typ` provided from above if available when translating `ConditionalOperator` - don't even set anything if that variable was already initialized by merely translating the branch expression, eg when it's a constructor - fix long-standing TODO to propagate these initialization facts accurately for ConditionalOperator (used by `init_expr_trans` to also figure out if it should insert a store to the variable being initialised or not) The rest of the changes adapt some relevant other constructs to deal with conditionalOperator properly now that it can set the current variable itself, instead of storing stuff inside a temp variable. This change was a problem because some constructs, eg a variable declaration, will insert nodes that set up the variable before calling its initialization, and now the initialization happens *before* that setup, in the translation of the inner conditional operator, which naturally creates nodes above the current one. - add a generic helper to force a sequential order between two translation results, forcing node creation if necessary - use that in `init_expr_trans` and `cxxNewExpr_trans` - adjust many places where `var_exp_typ` was incorrectly not reset when translating sub-expressions The sequentiality business creates more nodes when used, and the conditionalOperator business uses fewer temporary variables, so the frontend results change quite a bit. Note that biabduction tests were invaluable in debugging this. There could be other constructs to adjust similarly to cxxNewExpr that were not covered by the tests though. Added tests in pulse that exercises the previous bug. Reviewed By: da319 Differential Revision: D24796282 fbshipit-source-id: 0790c8d17
4 years ago
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_13" [label="13: Prune (false branch, switch) \n PRUNE(!(&value == 0), false); [line 191, column 5]\n " shape="invhouse"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_13" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_3" ;
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_14" [label="14: DeclStmt \n VARIABLE_DECLARED(value:int); [line 189, column 3]\n *&value:int=0 [line 189, column 3]\n " shape="box"]
"test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_14" -> "test_switch11.a1a6d859e414d268a57ed2a2bb6f8a8e_5" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_1" [label="1: Start test_switch2\nFormals: \nLocals: something:int z:int x:int value:int \n " color=yellow style=filled]
"test_switch2.0717c55583f10f472ddb2d73d867e556_1" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_18" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_2" [label="2: Exit test_switch2 \n " color=yellow style=filled]
"test_switch2.0717c55583f10f472ddb2d73d867e556_3" [label="3: Return Stmt \n *&return:int=0 [line 56, column 3]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_3" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_2" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_4" [label="4: SwitchStmt \n n$0=*&value:int [line 38, column 11]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_4" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_16" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_4" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_17" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_5" [label="5: BinaryOperatorStmt: Assign \n *&z:int=42 [line 50, column 7]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_5" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_3" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_6" [label="6: UnaryOperator \n n$3=*&something:int [line 48, column 7]\n *&something:int=(n$3 + 1) [line 48, column 7]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_6" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_5" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_7" [label="7: DeclStmt \n VARIABLE_DECLARED(something:int); [line 47, column 7]\n *&something:int=1 [line 47, column 7]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_7" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_6" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_8" [label="8: DeclStmt \n VARIABLE_DECLARED(z:int); [line 43, column 7]\n *&z:int=9 [line 43, column 7]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_8" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_7" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_9" [label="9: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 41, column 7]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_9" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_3" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_10" [label="10: Prune (true branch, switch) \n PRUNE((n$0 == 3), true); [line 53, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_10" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_3" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_11" [label="11: Prune (false branch, switch) \n PRUNE(!(n$0 == 3), false); [line 53, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_11" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_7" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_12" [label="12: Prune (true branch, switch) \n PRUNE((n$0 == 2), true); [line 52, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_12" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_3" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_13" [label="13: Prune (false branch, switch) \n PRUNE(!(n$0 == 2), false); [line 52, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_13" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_10" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_13" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_11" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_14" [label="14: Prune (true branch, switch) \n PRUNE((n$0 == 1), true); [line 46, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_14" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_7" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_15" [label="15: Prune (false branch, switch) \n PRUNE(!(n$0 == 1), false); [line 46, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_15" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_12" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_15" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_13" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_16" [label="16: Prune (true branch, switch) \n PRUNE((n$0 == 0), true); [line 40, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_16" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_9" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_17" [label="17: Prune (false branch, switch) \n PRUNE(!(n$0 == 0), false); [line 40, column 5]\n " shape="invhouse"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_17" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_14" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_17" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_15" ;
"test_switch2.0717c55583f10f472ddb2d73d867e556_18" [label="18: DeclStmt \n VARIABLE_DECLARED(value:int); [line 37, column 3]\n *&value:int=0 [line 37, column 3]\n " shape="box"]
"test_switch2.0717c55583f10f472ddb2d73d867e556_18" -> "test_switch2.0717c55583f10f472ddb2d73d867e556_4" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_1" [label="1: Start test_switch3\nFormals: \nLocals: z:int something:int value:int \n " color=yellow style=filled]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_1" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_17" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_2" [label="2: Exit test_switch3 \n " color=yellow style=filled]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" [label="3: Return Stmt \n *&return:int=0 [line 74, column 3]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_2" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_4" [label="4: SwitchStmt \n n$0=*&value:int [line 61, column 11]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_4" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_15" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_4" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_16" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_5" [label="5: DeclStmt \n VARIABLE_DECLARED(z:int); [line 69, column 7]\n *&z:int=9 [line 69, column 7]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_5" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_6" [label="6: UnaryOperator \n n$3=*&something:int [line 67, column 7]\n *&something:int=(n$3 + 1) [line 67, column 7]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_6" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_7" [label="7: DeclStmt \n VARIABLE_DECLARED(something:int); [line 66, column 7]\n *&something:int=1 [line 66, column 7]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_7" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_6" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_8" [label="8: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 63, column 7]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_8" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_9" [label="9: Prune (true branch, switch) \n PRUNE((n$0 == 3), true); [line 71, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_9" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_10" [label="10: Prune (false branch, switch) \n PRUNE(!(n$0 == 3), false); [line 71, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_10" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_11" [label="11: Prune (true branch, switch) \n PRUNE((n$0 == 2), true); [line 70, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_11" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_3" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_12" [label="12: Prune (false branch, switch) \n PRUNE(!(n$0 == 2), false); [line 70, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_12" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_9" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_12" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_10" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_13" [label="13: Prune (true branch, switch) \n PRUNE((n$0 == 1), true); [line 65, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_13" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_7" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_14" [label="14: Prune (false branch, switch) \n PRUNE(!(n$0 == 1), false); [line 65, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_14" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_11" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_14" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_12" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_15" [label="15: Prune (true branch, switch) \n PRUNE((n$0 == 0), true); [line 62, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_15" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_8" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_16" [label="16: Prune (false branch, switch) \n PRUNE(!(n$0 == 0), false); [line 62, column 5]\n " shape="invhouse"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_16" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_13" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_16" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_14" ;
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_17" [label="17: DeclStmt \n VARIABLE_DECLARED(value:int); [line 60, column 3]\n *&value:int=0 [line 60, column 3]\n " shape="box"]
"test_switch3.d602e3f7cc0068667fd33a3e54ff193c_17" -> "test_switch3.d602e3f7cc0068667fd33a3e54ff193c_4" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_1" [label="1: Start test_switch4\nFormals: \nLocals: something:int z:int x:int value:int \n " color=yellow style=filled]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_1" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_18" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_2" [label="2: Exit test_switch4 \n " color=yellow style=filled]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_3" [label="3: Return Stmt \n *&return:int=0 [line 97, column 3]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_3" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_2" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_4" [label="4: SwitchStmt \n n$0=*&value:int [line 79, column 11]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_4" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_16" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_4" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_17" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_5" [label="5: BinaryOperatorStmt: Assign \n *&z:int=42 [line 91, column 7]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_5" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_3" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_6" [label="6: UnaryOperator \n n$3=*&something:int [line 89, column 7]\n *&something:int=(n$3 + 1) [line 89, column 7]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_6" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_5" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_7" [label="7: DeclStmt \n VARIABLE_DECLARED(something:int); [line 88, column 7]\n *&something:int=1 [line 88, column 7]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_7" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_6" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_8" [label="8: DeclStmt \n VARIABLE_DECLARED(z:int); [line 84, column 7]\n *&z:int=9 [line 84, column 7]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_8" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_7" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_9" [label="9: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 82, column 7]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_9" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_3" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_10" [label="10: Prune (true branch, switch) \n PRUNE((n$0 == 3), true); [line 94, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_10" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_3" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_11" [label="11: Prune (false branch, switch) \n PRUNE(!(n$0 == 3), false); [line 94, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_11" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_7" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_12" [label="12: Prune (true branch, switch) \n PRUNE((n$0 == 2), true); [line 93, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_12" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_3" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_13" [label="13: Prune (false branch, switch) \n PRUNE(!(n$0 == 2), false); [line 93, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_13" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_10" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_13" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_11" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_14" [label="14: Prune (true branch, switch) \n PRUNE((n$0 == 1), true); [line 87, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_14" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_7" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_15" [label="15: Prune (false branch, switch) \n PRUNE(!(n$0 == 1), false); [line 87, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_15" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_12" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_15" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_13" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_16" [label="16: Prune (true branch, switch) \n PRUNE((n$0 == 0), true); [line 81, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_16" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_9" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_17" [label="17: Prune (false branch, switch) \n PRUNE(!(n$0 == 0), false); [line 81, column 5]\n " shape="invhouse"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_17" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_14" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_17" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_15" ;
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_18" [label="18: DeclStmt \n VARIABLE_DECLARED(value:int); [line 78, column 3]\n *&value:int=0 [line 78, column 3]\n " shape="box"]
"test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_18" -> "test_switch4.70d4e6e8539e8d1ee3505d4562bc236d_4" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_1" [label="1: Start test_switch5\nFormals: \nLocals: x:int value:int \n " color=yellow style=filled]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_1" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_14" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_2" [label="2: Exit test_switch5 \n " color=yellow style=filled]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_3" [label="3: Return Stmt \n *&return:int=0 [line 113, column 3]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_3" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_2" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_4" [label="4: + \n " ]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_4" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_5" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_5" [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 102, column 10]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_5" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_6" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_5" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_7" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_6" [label="6: Prune (true branch, while) \n PRUNE((n$0 < 10), true); [line 102, column 10]\n " shape="invhouse"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_6" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_8" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_7" [label="7: Prune (false branch, while) \n PRUNE(!(n$0 < 10), false); [line 102, column 10]\n " shape="invhouse"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_7" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_3" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_8" [label="8: SwitchStmt \n n$1=*&value:int [line 103, column 13]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_8" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_12" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_8" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_13" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_9" [label="9: Call _fun_printf \n n$3=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 109, column 9]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_9" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_4" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_10" [label="10: BinaryOperatorStmt: Assign \n n$5=*&value:int [line 106, column 11]\n *&x:int=(n$5 + 1) [line 106, column 7]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_10" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_4" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_11" [label="11: Call _fun_printf \n n$6=_fun_printf(\"(out)HELLO WORLD!\":char*) [line 105, column 7]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_11" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_10" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_12" [label="12: Prune (true branch, switch) \n PRUNE((n$1 == 0), true); [line 108, column 7]\n " shape="invhouse"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_12" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_9" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_13" [label="13: Prune (false branch, switch) \n PRUNE(!(n$1 == 0), false); [line 108, column 7]\n " shape="invhouse"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_13" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_4" ;
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_14" [label="14: DeclStmt \n VARIABLE_DECLARED(value:int); [line 101, column 3]\n *&value:int=0 [line 101, column 3]\n " shape="box"]
"test_switch5.1d93fcc376cd01517eabe22cb325bcfd_14" -> "test_switch5.1d93fcc376cd01517eabe22cb325bcfd_4" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_1" [label="1: Start test_switch6\nFormals: \nLocals: 0$?%__sil_tmpSIL_temp_conditional___n$0:int z:int something:int value:int \n " color=yellow style=filled]
"test_switch6.a23e54b3840073f4ece330ef3c560915_1" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_23" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_2" [label="2: Exit test_switch6 \n " color=yellow style=filled]
"test_switch6.a23e54b3840073f4ece330ef3c560915_3" [label="3: Return Stmt \n *&return:int=0 [line 131, column 3]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_3" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_2" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_4" [label="4: + \n " ]
"test_switch6.a23e54b3840073f4ece330ef3c560915_4" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_10" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_5" [label="5: BinaryOperatorStmt: GT \n n$1=*&value:int [line 118, column 11]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_5" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_6" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_5" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_7" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_6" [label="6: Prune (true branch, boolean exp) \n PRUNE((n$1 > 0), true); [line 118, column 11]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_6" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_8" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_7" [label="7: Prune (false branch, boolean exp) \n PRUNE(!(n$1 > 0), false); [line 118, column 11]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_7" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_9" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_8" [label="8: ConditionalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int=1 [line 118, column 11]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_8" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_4" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_9" [label="9: ConditionalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$0:int=0 [line 118, column 11]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_9" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_4" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_10" [label="10: SwitchStmt \n n$2=*&0$?%__sil_tmpSIL_temp_conditional___n$0:int [line 118, column 11]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_10" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_21" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_10" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_22" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_11" [label="11: DeclStmt \n VARIABLE_DECLARED(z:int); [line 126, column 7]\n *&z:int=9 [line 126, column 7]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_11" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_3" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_12" [label="12: UnaryOperator \n n$5=*&something:int [line 124, column 7]\n *&something:int=(n$5 + 1) [line 124, column 7]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_12" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_3" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_13" [label="13: DeclStmt \n VARIABLE_DECLARED(something:int); [line 123, column 7]\n *&something:int=1 [line 123, column 7]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_13" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_12" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_14" [label="14: Call _fun_printf \n n$7=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 120, column 7]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_14" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_3" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_15" [label="15: Prune (true branch, switch) \n PRUNE((n$2 == 3), true); [line 128, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_15" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_3" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_16" [label="16: Prune (false branch, switch) \n PRUNE(!(n$2 == 3), false); [line 128, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_16" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_3" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_17" [label="17: Prune (true branch, switch) \n PRUNE((n$2 == 2), true); [line 127, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_17" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_3" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_18" [label="18: Prune (false branch, switch) \n PRUNE(!(n$2 == 2), false); [line 127, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_18" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_15" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_18" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_16" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_19" [label="19: Prune (true branch, switch) \n PRUNE((n$2 == 1), true); [line 122, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_19" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_13" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_20" [label="20: Prune (false branch, switch) \n PRUNE(!(n$2 == 1), false); [line 122, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_20" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_17" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_20" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_18" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_21" [label="21: Prune (true branch, switch) \n PRUNE((n$2 == 0), true); [line 119, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_21" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_14" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_22" [label="22: Prune (false branch, switch) \n PRUNE(!(n$2 == 0), false); [line 119, column 5]\n " shape="invhouse"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_22" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_19" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_22" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_20" ;
"test_switch6.a23e54b3840073f4ece330ef3c560915_23" [label="23: DeclStmt \n VARIABLE_DECLARED(value:int); [line 117, column 3]\n *&value:int=0 [line 117, column 3]\n " shape="box"]
"test_switch6.a23e54b3840073f4ece330ef3c560915_23" -> "test_switch6.a23e54b3840073f4ece330ef3c560915_5" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_1" [label="1: Start test_switch7\nFormals: \nLocals: z:int something:int value:int \n " color=yellow style=filled]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_1" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_17" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_2" [label="2: Exit test_switch7 \n " color=yellow style=filled]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" [label="3: Return Stmt \n *&return:int=0 [line 151, column 3]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_2" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_4" [label="4: SwitchStmt \n n$0=_fun_getValue() [line 138, column 11]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_4" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_15" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_4" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_16" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_5" [label="5: DeclStmt \n VARIABLE_DECLARED(z:int); [line 146, column 7]\n *&z:int=9 [line 146, column 7]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_5" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_6" [label="6: UnaryOperator \n n$3=*&something:int [line 144, column 7]\n *&something:int=(n$3 + 1) [line 144, column 7]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_6" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_7" [label="7: DeclStmt \n VARIABLE_DECLARED(something:int); [line 143, column 7]\n *&something:int=1 [line 143, column 7]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_7" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_6" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_8" [label="8: Call _fun_printf \n n$5=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 140, column 7]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_8" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_9" [label="9: Prune (true branch, switch) \n PRUNE((n$0 == 3), true); [line 148, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_9" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_10" [label="10: Prune (false branch, switch) \n PRUNE(!(n$0 == 3), false); [line 148, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_10" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_11" [label="11: Prune (true branch, switch) \n PRUNE((n$0 == 2), true); [line 147, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_11" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_3" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_12" [label="12: Prune (false branch, switch) \n PRUNE(!(n$0 == 2), false); [line 147, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_12" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_9" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_12" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_10" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_13" [label="13: Prune (true branch, switch) \n PRUNE((n$0 == 1), true); [line 142, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_13" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_7" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_14" [label="14: Prune (false branch, switch) \n PRUNE(!(n$0 == 1), false); [line 142, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_14" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_11" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_14" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_12" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_15" [label="15: Prune (true branch, switch) \n PRUNE((n$0 == 0), true); [line 139, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_15" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_8" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_16" [label="16: Prune (false branch, switch) \n PRUNE(!(n$0 == 0), false); [line 139, column 5]\n " shape="invhouse"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_16" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_13" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_16" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_14" ;
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_17" [label="17: DeclStmt \n VARIABLE_DECLARED(value:int); [line 137, column 3]\n *&value:int=0 [line 137, column 3]\n " shape="box"]
"test_switch7.8298274f5578f21bdddf71ffa79afcb8_17" -> "test_switch7.8298274f5578f21bdddf71ffa79afcb8_4" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_1" [label="1: Start test_switch8\nFormals: \nLocals: a:int 0$?%__sil_tmpSIL_temp_conditional___n$1:int z:int something:int value:int \n " color=yellow style=filled]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_1" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_29" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_2" [label="2: Exit test_switch8 \n " color=yellow style=filled]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_3" [label="3: Return Stmt \n *&return:int=0 [line 173, column 3]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_3" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_2" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_4" [label="4: + \n " ]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_4" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_5" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_5" [label="5: BinaryOperatorStmt: LT \n n$0=*&value:int [line 156, column 10]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_5" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_6" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_5" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_7" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_6" [label="6: Prune (true branch, while) \n PRUNE((n$0 < 10), true); [line 156, column 10]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_6" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_10" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_7" [label="7: Prune (false branch, while) \n PRUNE(!(n$0 < 10), false); [line 156, column 10]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_7" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_3" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_8" [label="8: DeclStmt \n VARIABLE_DECLARED(a:int); [line 171, column 5]\n *&a:int=0 [line 171, column 5]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_8" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_4" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_9" [label="9: + \n " ]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_9" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_15" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_10" [label="10: BinaryOperatorStmt: EQ \n n$2=_fun_getValue() [line 157, column 13]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_10" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_11" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_10" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_12" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_11" [label="11: Prune (true branch, boolean exp) \n PRUNE((n$2 == 0), true); [line 157, column 13]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_11" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_13" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_12" [label="12: Prune (false branch, boolean exp) \n PRUNE(!(n$2 == 0), false); [line 157, column 13]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_12" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_14" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_13" [label="13: ConditionalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int=1 [line 157, column 13]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_13" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_9" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_14" [label="14: ConditionalStmt Branch \n *&0$?%__sil_tmpSIL_temp_conditional___n$1:int=2 [line 157, column 13]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_14" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_9" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_15" [label="15: SwitchStmt \n n$3=*&0$?%__sil_tmpSIL_temp_conditional___n$1:int [line 157, column 13]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_15" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_27" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_15" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_28" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_16" [label="16: DeclStmt \n VARIABLE_DECLARED(z:int); [line 166, column 9]\n *&z:int=9 [line 166, column 9]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_16" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_8" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_17" [label="17: UnaryOperator \n n$7=*&something:int [line 163, column 9]\n *&something:int=(n$7 + 1) [line 163, column 9]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_17" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_4" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_18" [label="18: DeclStmt \n VARIABLE_DECLARED(something:int); [line 162, column 9]\n *&something:int=1 [line 162, column 9]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_18" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_17" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_19" [label="19: Return Stmt \n *&return:int=0 [line 160, column 9]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_19" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_2" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_20" [label="20: Call _fun_printf \n n$8=_fun_printf(\"(0)HELLO WORLD!\":char*) [line 159, column 9]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_20" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_19" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_21" [label="21: Prune (true branch, switch) \n PRUNE((n$3 == 3), true); [line 168, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_21" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_8" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_22" [label="22: Prune (false branch, switch) \n PRUNE(!(n$3 == 3), false); [line 168, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_22" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_8" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_23" [label="23: Prune (true branch, switch) \n PRUNE((n$3 == 2), true); [line 167, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_23" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_8" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_24" [label="24: Prune (false branch, switch) \n PRUNE(!(n$3 == 2), false); [line 167, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_24" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_21" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_24" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_22" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_25" [label="25: Prune (true branch, switch) \n PRUNE((n$3 == 1), true); [line 161, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_25" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_18" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_26" [label="26: Prune (false branch, switch) \n PRUNE(!(n$3 == 1), false); [line 161, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_26" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_23" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_26" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_24" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_27" [label="27: Prune (true branch, switch) \n PRUNE((n$3 == 0), true); [line 158, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_27" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_20" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_28" [label="28: Prune (false branch, switch) \n PRUNE(!(n$3 == 0), false); [line 158, column 7]\n " shape="invhouse"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_28" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_25" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_28" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_26" ;
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_29" [label="29: DeclStmt \n VARIABLE_DECLARED(value:int); [line 155, column 3]\n *&value:int=0 [line 155, column 3]\n " shape="box"]
"test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_29" -> "test_switch8.6a6653773b94c1bb3f3c90dc1790d1ed_4" ;
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_1" [label="1: Start test_switch9\nFormals: \nLocals: value:int \n " color=yellow style=filled]
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_1" -> "test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_5" ;
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_2" [label="2: Exit test_switch9 \n " color=yellow style=filled]
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_3" [label="3: Return Stmt \n *&return:int=0 [line 179, column 3]\n " shape="box"]
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_3" -> "test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_2" ;
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_4" [label="4: SwitchStmt \n n$0=*&value:int [line 178, column 11]\n " shape="box"]
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_4" -> "test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_3" ;
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_5" [label="5: DeclStmt \n VARIABLE_DECLARED(value:int); [line 177, column 3]\n *&value:int=0 [line 177, column 3]\n " shape="box"]
"test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_5" -> "test_switch9.f4a96f02ca05cf92a483f69cdfe717b1_4" ;
}