void record_vars_into (tree vars, tree fn) { bool change_cfun = fn != current_function_decl; if (change_cfun) push_cfun (DECL_STRUCT_FUNCTION (fn)); for (; vars; vars = DECL_CHAIN (vars)) { tree var = vars; /* BIND_EXPRs contains also function/type/constant declarations we don't need to care about. */ if (TREE_CODE (var) != VAR_DECL) continue; /* Nothing to do in this case. */ if (DECL_EXTERNAL (var)) continue; /* Record the variable. */ add_local_decl (cfun, var); } if (change_cfun) pop_cfun (); }
void cilk_install_body_with_frame_cleanup (tree fndecl, tree orig_body, void *wd) { tree frame = make_cilk_frame (fndecl); tree dtor = create_cilk_function_exit (frame, false, false); add_local_decl (cfun, frame); cfun->language = ggc_cleared_alloc<language_function> (); location_t loc = EXPR_LOCATION (orig_body); tree list = alloc_stmt_list (); DECL_SAVED_TREE (fndecl) = list; tree fptr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (frame)), frame); tree body = cilk_install_body_pedigree_operations (fptr); gcc_assert (TREE_CODE (body) == STATEMENT_LIST); tree detach_expr = build_call_expr (cilk_detach_fndecl, 1, fptr); append_to_statement_list (detach_expr, &body); cilk_outline (fndecl, &orig_body, (struct wrapper_data *) wd); append_to_statement_list (orig_body, &body); if (flag_exceptions) { tree except_flag = set_cilk_except_flag (frame); tree except_data = set_cilk_except_data (frame); tree catch_list = alloc_stmt_list (); append_to_statement_list (except_flag, &catch_list); append_to_statement_list (except_data, &catch_list); body = create_try_catch_expr (body, catch_list); } append_to_statement_list (build_stmt (loc, TRY_FINALLY_EXPR, body, dtor), &list); }
void record_vars_into (tree vars, tree fn) { for (; vars; vars = DECL_CHAIN (vars)) { tree var = vars; /* BIND_EXPRs contains also function/type/constant declarations we don't need to care about. */ if (TREE_CODE (var) != VAR_DECL) continue; /* Nothing to do in this case. */ if (DECL_EXTERNAL (var)) continue; /* Record the variable. */ add_local_decl (DECL_STRUCT_FUNCTION (fn), var); } }