static void gimplify_switch_stmt (tree *stmt_p) { tree stmt = *stmt_p; tree break_block, body; location_t stmt_locus = input_location; break_block = begin_bc_block (bc_break); body = SWITCH_STMT_BODY (stmt); if (!body) body = build_empty_stmt (); *stmt_p = build3 (SWITCH_EXPR, SWITCH_STMT_TYPE (stmt), SWITCH_STMT_COND (stmt), body, NULL_TREE); SET_EXPR_LOCATION (*stmt_p, stmt_locus); gimplify_stmt (stmt_p); *stmt_p = finish_bc_block (bc_break, break_block, *stmt_p); }
static void gimplify_switch_stmt (tree *stmt_p, gimple_seq *pre_p) { tree stmt = *stmt_p; tree break_block, body, t; location_t stmt_locus = input_location; gimple_seq seq = NULL; break_block = begin_bc_block (bc_break); body = SWITCH_STMT_BODY (stmt); if (!body) body = build_empty_stmt (); t = build3 (SWITCH_EXPR, SWITCH_STMT_TYPE (stmt), SWITCH_STMT_COND (stmt), body, NULL_TREE); SET_EXPR_LOCATION (t, stmt_locus); gimplify_and_add (t, &seq); seq = finish_bc_block (bc_break, break_block, seq); gimple_seq_add_seq (pre_p, seq); *stmt_p = NULL_TREE; }
static void genericize_switch_stmt (tree *stmt_p, int *walk_subtrees, void *data) { tree stmt = *stmt_p; tree break_block, body, cond, type; location_t stmt_locus = EXPR_LOCATION (stmt); break_block = begin_bc_block (bc_break, stmt_locus); body = SWITCH_STMT_BODY (stmt); if (!body) body = build_empty_stmt (stmt_locus); cond = SWITCH_STMT_COND (stmt); type = SWITCH_STMT_TYPE (stmt); cp_walk_tree (&body, cp_genericize_r, data, NULL); cp_walk_tree (&cond, cp_genericize_r, data, NULL); cp_walk_tree (&type, cp_genericize_r, data, NULL); *walk_subtrees = 0; *stmt_p = build3_loc (stmt_locus, SWITCH_EXPR, type, cond, body, NULL_TREE); finish_bc_block (stmt_p, bc_break, break_block); }