Since v3, I've rebased these and moved the fortran changes to precede these (changing gfc_free to free introduced a few more instances that this transformation deals with). As mentioned before, the conditional-removing transformation was done mechanically with two manual corrections. One to deal with a following "else", and another to restore a conditional that should not have been removed.
A final(?) bootstrap and "make check" is running now. From d64b103b57c3785bb66a8c456ef4c0ec992f4852 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Mon, 3 Jan 2011 16:52:37 +0100 Subject: [PATCH 1/2] discourage unnecessary use of if before free * README.Portability: Explain why "if (P) free (P)" is best avoided. --- gcc/README.Portability | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-) diff --git a/gcc/README.Portability b/gcc/README.Portability index 32a33e2..4101a2f 100644 --- a/gcc/README.Portability +++ b/gcc/README.Portability @@ -51,14 +51,28 @@ foo (bar, ) needs to be coded in some other way. -free and realloc ----------------- +Avoid unnecessary test before free +---------------------------------- -Some implementations crash upon attempts to free or realloc the null -pointer. Thus if mem might be null, you need to write +Since SunOS 4 stopped being a reasonable portability target, +(which happened around 2007) there has been no need to guard +against "free (NULL)". Thus, any guard like the following +constitutes a redundant test: + + if (P) + free (P); + +It is better to avoid the test.[*] +Instead, simply free P, regardless of whether it is NULL. + +[*] However, if your profiling exposes a test like this in a +performance-critical loop, say where P is nearly always NULL, and +the cost of calling free on a NULL pointer would be prohibitively +high, consider using __builtin_expect, e.g., like this: + + if (__builtin_expect (ptr != NULL, 0)) + free (ptr); - if (mem) - free (mem); Trigraphs @@ -194,4 +208,3 @@ o Passing incorrect types to fprintf and friends. o Adding a function declaration for a module declared in another file to a .c file instead of to a .h file. - -- 1.7.5.rc2.295.g19c42 From b4e18263cfa1e7ec717792da6e75c5fa179bd6d7 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyer...@redhat.com> Date: Fri, 15 Apr 2011 20:47:40 +0200 Subject: [PATCH 2/2] remove useless if-before-free tests Change "if (E) free (E);" to "free (E);" everywhere except in the libgo/, intl/, zlib/ and classpath/ directories. Also transform equivalent variants like "if (E != NULL) free (E);" and allow an extra cast on the argument to free. Otherwise, the tested and freed "E" expressions must be identical, modulo white space. --- gcc/ChangeLog | 39 +++++++++++++++++ gcc/ada/ChangeLog | 4 ++ gcc/ada/initialize.c | 3 +- gcc/c-family/ChangeLog | 7 +++- gcc/c-family/c-format.c | 6 +-- gcc/calls.c | 15 ++---- gcc/cfgcleanup.c | 3 +- gcc/collect2.c | 3 +- gcc/config/i386/i386.c | 3 +- gcc/config/mcore/mcore.c | 3 +- gcc/coverage.c | 3 +- gcc/cp/ChangeLog | 4 ++ gcc/cp/tree.c | 3 +- gcc/cse.c | 6 +-- gcc/cselib.c | 3 +- gcc/df-core.c | 15 ++---- gcc/fortran/ChangeLog | 7 +++ gcc/fortran/expr.c | 3 +- gcc/fortran/gfortranspec.c | 5 +- gcc/fortran/interface.c | 3 +- gcc/fortran/trans-openmp.c | 3 +- gcc/function.c | 3 +- gcc/gcc.c | 15 ++---- gcc/gcov.c | 6 +-- gcc/gensupport.c | 12 ++---- gcc/graphite-clast-to-gimple.c | 3 +- gcc/graphite-sese-to-poly.c | 3 +- gcc/haifa-sched.c | 3 +- gcc/ipa-prop.c | 3 +- gcc/ipa-pure-const.c | 3 +- gcc/ipa-reference.c | 3 +- gcc/ira-costs.c | 12 ++---- gcc/ira.c | 18 +++----- gcc/java/ChangeLog | 6 ++- gcc/java/jcf-parse.c | 3 +- gcc/matrix-reorg.c | 9 +--- gcc/prefix.c | 3 +- gcc/profile.c | 3 +- gcc/reload1.c | 6 +-- gcc/sched-deps.c | 3 +- gcc/sel-sched-ir.c | 3 +- gcc/sese.c | 6 +-- gcc/tree-data-ref.c | 6 +-- gcc/tree-eh.c | 3 +- gcc/tree-ssa-coalesce.c | 3 +- gcc/tree-ssa-live.c | 6 +-- gcc/tree-ssa-loop-ivopts.c | 6 +-- gcc/tree-ssa-pre.c | 3 +- libcpp/ChangeLog | 7 +++ libcpp/files.c | 3 +- libcpp/init.c | 3 +- libcpp/macro.c | 3 +- libcpp/pch.c | 9 +--- libdecnumber/ChangeLog | 9 ++++ libdecnumber/decNumber.c | 80 +++++++++++++++++----------------- libgfortran/ChangeLog | 10 ++++ libgfortran/intrinsics/move_alloc.c | 3 +- libgfortran/io/fbuf.c | 3 +- libgfortran/io/format.c | 3 +- libgfortran/io/open.c | 3 +- libgfortran/io/unit.c | 9 +--- libgfortran/io/unix.c | 3 +- libiberty/ChangeLog | 13 ++++++ libiberty/cp-demint.c | 6 +-- libiberty/cplus-dem.c | 3 +- libiberty/pex-common.c | 9 +--- libiberty/pex-msdos.c | 6 +-- libiberty/pex-win32.c | 24 ++++------- libiberty/regex.c | 11 ++--- libiberty/spaces.c | 5 +-- libstdc++-v3/ChangeLog | 5 ++ libstdc++-v3/libsupc++/del_opnt.cc | 3 +- lto-plugin/ChangeLog | 4 ++ lto-plugin/lto-plugin.c | 6 +-- 74 files changed, 267 insertions(+), 270 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 718056a..d6c1c07 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,42 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + Remove useless if-before-free tests. + * calls.c (expand_call, save_area): Likewise. + * cfgcleanup.c (try_forward_edges): Likewise. + * collect2.c (collect_execute): Likewise. + * config/i386/i386.c (ix86_valid_target_attribute_tree): Likewise. + * config/mcore/mcore.c (mcore_expand_prolog): Likewise. + * coverage.c (coverage_checksum_string): Likewise. + * cse.c (init_cse_reg_info, delete_trivially_dead_insns): Likewise. + * cselib.c (cselib_init): Likewise. + * df-core.c (rest_of_handle_df_finish, df_analyze): Likewise. + (df_set_clean_cfg): Likewise. + * function.c (free_after_compilation): Likewise. + * gcc.c (do_spec_1, main): Likewise. + * gcov.c (create_file_names): Likewise. + * gensupport.c (identify_predicable_attribute): Likewise. + * graphite-clast-to-gimple.c (save_clast_name_index): Likewise. + * graphite-sese-to-poly.c (free_data_refs_aux): Likewise. + * haifa-sched.c (haifa_finish_h_i_d): Likewise. + * ipa-prop.c (ipa_free_node_params_substructures): Likewise. + * ipa-pure-const.c (local_pure_const): Likewise. + * ipa-reference.c (propagate): Likewise. + * ira-costs.c (free_ira_costs): Likewise. + * ira.c (free_register_move_costs, build_insn_chain): Likewise. + * matrix-reorg.c (mat_free): Likewise. + * prefix.c (get_key_value): Likewise. + * profile.c (compute_value_histograms): Likewise. + * reload1.c (free_reg_equiv): Likewise. + * sched-deps.c (free_deps): Likewise. + * sel-sched-ir.c (fence_clear): Likewise. + * sese.c (set_rename, if_region_set_false_region): Likewise. + * tree-data-ref.c (free_rdg): Likewise. + * tree-eh.c (lower_try_finally): Likewise. + * tree-ssa-coalesce.c (delete_coalesce_list): Likewise. + * tree-ssa-live.c (delete_var_map): Likewise. + * tree-ssa-loop-ivopts.c (free_loop_data): Likewise. + * tree-ssa-pre.c (phi_trans_add): Likewise. + 2011-04-18 Jan Hubicka <j...@suse.cz> * ipa-inline.c (inline_small_functions): Fix pasto in previous patch. diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a738316..8f6a8e8 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * initialize.c (__gnat_initialize): Remove useless if-before-free. + 2011-04-17 Eric Botcazou <ebotca...@adacore.com> * gcc-interface/Make-lang.in (gnatbind): Replace $(ALL_CFLAGS) with diff --git a/gcc/ada/initialize.c b/gcc/ada/initialize.c index 32ea0e5..e2ad904 100644 --- a/gcc/ada/initialize.c +++ b/gcc/ada/initialize.c @@ -217,8 +217,7 @@ __gnat_initialize (void *eh ATTRIBUTE_UNUSED) FindClose (hDir); - if (dir != NULL) - free (dir); + free (dir); } } else diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index f8f0b4b..61da788 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * c-format.c (init_dollar_format_checking): Remove useless + if-before-free. + 2011-04-15 Nicola Pero <nicola.p...@meta-innovation.com> * c-objc.h (objc_get_interface_ivars): Removed. @@ -1105,7 +1110,7 @@ * c-common.c: Include gt-c-family-c-common.h. * c-pragma.c: Include gt-c-family-c-pragma.h. -Copyright (C) 2010 Free Software Foundation, Inc. +Copyright (C) 2010, 2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff --git a/gcc/c-family/c-format.c b/gcc/c-family/c-format.c index 801e434..0c5115a 100644 --- a/gcc/c-family/c-format.c +++ b/gcc/c-family/c-format.c @@ -1107,10 +1107,8 @@ init_dollar_format_checking (int first_arg_num, tree params) } if (dollar_arguments_alloc < dollar_arguments_count) { - if (dollar_arguments_used) - free (dollar_arguments_used); - if (dollar_arguments_pointer_p) - free (dollar_arguments_pointer_p); + free (dollar_arguments_used); + free (dollar_arguments_pointer_p); dollar_arguments_alloc = dollar_arguments_count; dollar_arguments_used = XNEWVEC (char, dollar_arguments_alloc); dollar_arguments_pointer_p = XNEWVEC (char, dollar_arguments_alloc); diff --git a/gcc/calls.c b/gcc/calls.c index 2e79777..bb95852 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2555,8 +2555,7 @@ expand_call (tree exp, rtx target, int ignore) highest_outgoing_arg_in_use = MAX (initial_highest_arg_in_use, needed); #endif - if (stack_usage_map_buf) - free (stack_usage_map_buf); + free (stack_usage_map_buf); stack_usage_map_buf = XNEWVEC (char, highest_outgoing_arg_in_use); stack_usage_map = stack_usage_map_buf; @@ -2661,8 +2660,7 @@ expand_call (tree exp, rtx target, int ignore) = stack_arg_under_construction; stack_arg_under_construction = 0; /* Make a new map for the new argument list. */ - if (stack_usage_map_buf) - free (stack_usage_map_buf); + free (stack_usage_map_buf); stack_usage_map_buf = XCNEWVEC (char, highest_outgoing_arg_in_use); stack_usage_map = stack_usage_map_buf; highest_outgoing_arg_in_use = 0; @@ -3152,8 +3150,7 @@ expand_call (tree exp, rtx target, int ignore) /* Free up storage we no longer need. */ for (i = 0; i < num_actuals; ++i) - if (args[i].aligned_regs) - free (args[i].aligned_regs); + free (args[i].aligned_regs); insns = get_insns (); end_sequence (); @@ -3208,8 +3205,7 @@ expand_call (tree exp, rtx target, int ignore) currently_expanding_call--; - if (stack_usage_map_buf) - free (stack_usage_map_buf); + free (stack_usage_map_buf); return target; } @@ -3966,8 +3962,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value, stack_usage_map = initial_stack_usage_map; } - if (stack_usage_map_buf) - free (stack_usage_map_buf); + free (stack_usage_map_buf); return value; diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 98c51ad..179cd00 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -646,8 +646,7 @@ try_forward_edges (int mode, basic_block b) ei_next (&ei); } - if (threaded_edges) - free (threaded_edges); + free (threaded_edges); return changed; } diff --git a/gcc/collect2.c b/gcc/collect2.c index 373483b..0c554f0 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -2087,8 +2087,7 @@ collect_execute (const char *prog, char **argv, const char *outname, fatal (errmsg); } - if (response_arg) - free (response_arg); + free (response_arg); return pex; } diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b6d41f0..80cb104 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4783,8 +4783,7 @@ ix86_valid_target_attribute_tree (tree args) /* Free up memory allocated to hold the strings */ for (i = 0; i < IX86_FUNCTION_SPECIFIC_MAX; i++) - if (option_strings[i]) - free (option_strings[i]); + free (option_strings[i]); } return t; diff --git a/gcc/config/mcore/mcore.c b/gcc/config/mcore/mcore.c index 093ac2f..741452e 100644 --- a/gcc/config/mcore/mcore.c +++ b/gcc/config/mcore/mcore.c @@ -1980,8 +1980,7 @@ mcore_expand_prolog (void) gcc_assert (GET_CODE (x) == SYMBOL_REF); - if (mcore_current_function_name) - free (mcore_current_function_name); + free (mcore_current_function_name); mcore_current_function_name = xstrdup (XSTR (x, 0)); diff --git a/gcc/coverage.c b/gcc/coverage.c index 79d20ab..58b7c69 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -522,8 +522,7 @@ coverage_checksum_string (unsigned chksum, const char *string) } chksum = crc32_string (chksum, string); - if (dup) - free (dup); + free (dup); return chksum; } diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1037348..1aae32f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2011-04-18 Jim Meyering <meyer...@redhat.com> + + * tree.c (cxx_printable_name_internal): Remove useless if-before-free. + 2011-04-17 Jan Hubicka <j...@suse.cz> * semantics.c (finish_goto_stmt): Do set UNINLINABLE flag on computed diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 25f2c32..23daa6c 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1509,8 +1509,7 @@ cxx_printable_name_internal (tree decl, int v, bool translate) gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl)); } - if (print_ring[ring_counter]) - free (print_ring[ring_counter]); + free (print_ring[ring_counter]); print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate)); uid_ring[ring_counter] = DECL_UID (decl); diff --git a/gcc/cse.c b/gcc/cse.c index f7b477c..d83b38a 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -796,8 +796,7 @@ init_cse_reg_info (unsigned int nregs) } /* Reallocate the table with NEW_SIZE entries. */ - if (cse_reg_info_table) - free (cse_reg_info_table); + free (cse_reg_info_table); cse_reg_info_table = XNEWVEC (struct cse_reg_info, new_size); cse_reg_info_table_size = new_size; cse_reg_info_table_first_uninitialized = 0; @@ -6975,8 +6974,7 @@ delete_trivially_dead_insns (rtx insns, int nreg) df_insn_rescan (insn); } } - if (replacements) - free (replacements); + free (replacements); } if (dump_file && ndead) diff --git a/gcc/cselib.c b/gcc/cselib.c index dff0967..56e6d17 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -2462,8 +2462,7 @@ cselib_init (int record_what) if (!reg_values || reg_values_size < cselib_nregs || (reg_values_size > 10 && reg_values_size > cselib_nregs * 4)) { - if (reg_values) - free (reg_values); + free (reg_values); /* Some space for newly emit instructions so we don't end up reallocating in between passes. */ reg_values_size = cselib_nregs + (63 + cselib_nregs) / 16; diff --git a/gcc/df-core.c b/gcc/df-core.c index 98c2088..9f3ea42 100644 --- a/gcc/df-core.c +++ b/gcc/df-core.c @@ -811,10 +811,8 @@ rest_of_handle_df_finish (void) dflow->problem->free_fun (); } - if (df->postorder) - free (df->postorder); - if (df->postorder_inverted) - free (df->postorder_inverted); + free (df->postorder); + free (df->postorder_inverted); free (df->hard_regs_live_count); free (df); df = NULL; @@ -1183,10 +1181,8 @@ df_analyze (void) bool everything; int i; - if (df->postorder) - free (df->postorder); - if (df->postorder_inverted) - free (df->postorder_inverted); + free (df->postorder); + free (df->postorder_inverted); df->postorder = XNEWVEC (int, last_basic_block); df->postorder_inverted = XNEWVEC (int, last_basic_block); df->n_blocks = post_order_compute (df->postorder, true, true); @@ -1725,8 +1721,7 @@ df_check_cfg_clean (void) static void df_set_clean_cfg (void) { - if (saved_cfg) - free (saved_cfg); + free (saved_cfg); saved_cfg = df_compute_cfg_image (); } diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index f6e7d47..4ac8a6c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,12 @@ 2011-04-18 Jim Meyering <meyer...@redhat.com> + * expr.c (free_expr0): Remove useless if-before-free. + * gfortranspec.c (lang_specific_pre_link): Likewise. + * interface.c (gfc_extend_expr): Likewise. + * trans-openmp.c (gfc_trans_omp_array_reduction): Likewise. + +2011-04-18 Jim Meyering <meyer...@redhat.com> + remove now-unused definition of gfc_free * misc.c (gfc_free): Remove function. * gfortran.h (gfc_free): Remove its prototype. diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index 1e31653..4973112 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -433,8 +433,7 @@ free_expr0 (gfc_expr *e) } /* Free the representation. */ - if (e->representation.string) - free (e->representation.string); + free (e->representation.string); break; diff --git a/gcc/fortran/gfortranspec.c b/gcc/fortran/gfortranspec.c index 2d732fd..4d939a0 100644 --- a/gcc/fortran/gfortranspec.c +++ b/gcc/fortran/gfortranspec.c @@ -472,9 +472,8 @@ For more information about these matters, see the file named COPYING\n\n")); int lang_specific_pre_link (void) { - if (spec_file) - free (spec_file); - else if (library) + free (spec_file); + if (spec_file == NULL && library) do_spec ("%:include(libgfortran.spec)"); return 0; diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 872d489..5e7a1dc 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -3141,8 +3141,7 @@ gfc_extend_expr (gfc_expr *e, bool *real_error) } /* Don't use gfc_free_actual_arglist(). */ - if (actual->next != NULL) - free (actual->next); + free (actual->next); free (actual); return FAILURE; diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c index d709fdf..625daeb 100644 --- a/gcc/fortran/trans-openmp.c +++ b/gcc/fortran/trans-openmp.c @@ -714,8 +714,7 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where) free (symtree1); free (symtree2); free (symtree3); - if (symtree4) - free (symtree4); + free (symtree4); gfc_free_array_spec (outer_sym.as); } diff --git a/gcc/function.c b/gcc/function.c index c14a339..d7d56dd 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -211,8 +211,7 @@ free_after_compilation (struct function *f) prologue_insn_hash = NULL; epilogue_insn_hash = NULL; - if (crtl->emit.regno_pointer_align) - free (crtl->emit.regno_pointer_align); + free (crtl->emit.regno_pointer_align); memset (crtl, 0, sizeof (struct rtl_data)); f->eh = NULL; diff --git a/gcc/gcc.c b/gcc/gcc.c index 7ad959a..f9a2bb2 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -4806,8 +4806,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part) t->filename_length = temp_filename_length; } - if (saved_suffix) - free (saved_suffix); + free (saved_suffix); obstack_grow (&obstack, t->filename, t->filename_length); delete_this_arg = 1; @@ -6724,12 +6723,10 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n" { if (compare_debug) { - if (debug_check_temp_file[0]) - free (debug_check_temp_file[0]); + free (debug_check_temp_file[0]); debug_check_temp_file[0] = NULL; - if (debug_check_temp_file[1]) - free (debug_check_temp_file[1]); + free (debug_check_temp_file[1]); debug_check_temp_file[1] = NULL; } @@ -6773,12 +6770,10 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n" if (compare_debug) { - if (debug_check_temp_file[0]) - free (debug_check_temp_file[0]); + free (debug_check_temp_file[0]); debug_check_temp_file[0] = NULL; - if (debug_check_temp_file[1]) - free (debug_check_temp_file[1]); + free (debug_check_temp_file[1]); debug_check_temp_file[1] = NULL; } } diff --git a/gcc/gcov.c b/gcc/gcov.c index 56fff3a..bb27913 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -661,10 +661,8 @@ create_file_names (const char *file_name) int base; /* Free previous file names. */ - if (bbg_file_name) - free (bbg_file_name); - if (da_file_name) - free (da_file_name); + free (bbg_file_name); + free (da_file_name); da_file_name = bbg_file_name = NULL; bbg_file_time = 0; bbg_stamp = 0; diff --git a/gcc/gensupport.c b/gcc/gensupport.c index d2c2f71..682d2ac 100644 --- a/gcc/gensupport.c +++ b/gcc/gensupport.c @@ -594,8 +594,7 @@ identify_predicable_attribute (void) if (p_true == NULL || strchr (++p_true, ',') != NULL) { error_with_line (elem->lineno, "attribute `predicable' is not a boolean"); - if (p_false) - free (p_false); + free (p_false); return; } p_true[-1] = '\0'; @@ -611,15 +610,13 @@ identify_predicable_attribute (void) case CONST: error_with_line (elem->lineno, "attribute `predicable' cannot be const"); - if (p_false) - free (p_false); + free (p_false); return; default: error_with_line (elem->lineno, "attribute `predicable' must have a constant default"); - if (p_false) - free (p_false); + free (p_false); return; } @@ -631,8 +628,7 @@ identify_predicable_attribute (void) { error_with_line (elem->lineno, "unknown value `%s' for `predicable' attribute", value); - if (p_false) - free (p_false); + free (p_false); } } diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index 41356dc..c8356d3 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -114,8 +114,7 @@ save_clast_name_index (htab_t index_table, const char *name, int index) if (slot) { - if (*slot) - free (*slot); + free (*slot); *slot = new_clast_name_index (name, index); } diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index 064ded3..7474be0 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -190,8 +190,7 @@ free_data_refs_aux (VEC (data_reference_p, heap) *datarefs) { base_alias_pair *bap = (base_alias_pair *)(dr->aux); - if (bap->alias_set) - free (bap->alias_set); + free (bap->alias_set); free (bap); dr->aux = NULL; diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index e2d389b..d67aee8 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -5582,8 +5582,7 @@ haifa_finish_h_i_d (void) FOR_EACH_VEC_ELT (haifa_insn_data_def, h_i_d, i, data) { - if (data->reg_pressure != NULL) - free (data->reg_pressure); + free (data->reg_pressure); for (use = data->reg_use_list; use != NULL; use = next) { next = use->next_insn_use; diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index be223cc..7ba9fcb 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -1884,8 +1884,7 @@ ipa_free_all_edge_args (void) void ipa_free_node_params_substructures (struct ipa_node_params *info) { - if (info->params) - free (info->params); + free (info->params); memset (info, 0, sizeof (*info)); } diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c index eb5b0f6..67022c4 100644 --- a/gcc/ipa-pure-const.c +++ b/gcc/ipa-pure-const.c @@ -1662,8 +1662,7 @@ local_pure_const (void) lang_hooks.decl_printable_name (current_function_decl, 2)); } - if (l) - free (l); + free (l); if (changed) return execute_fixup_cfg (); else diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c index f874a2e..40fa6bc 100644 --- a/gcc/ipa-reference.c +++ b/gcc/ipa-reference.c @@ -913,8 +913,7 @@ propagate (void) node_g->statics_written); } } - if (node_info) - free (node_info); + free (node_info); if (node->aux) { free (node->aux); diff --git a/gcc/ira-costs.c b/gcc/ira-costs.c index 3b113b6..de894a2 100644 --- a/gcc/ira-costs.c +++ b/gcc/ira-costs.c @@ -1968,19 +1968,15 @@ free_ira_costs (void) { int i; - if (init_cost != NULL) - free (init_cost); + free (init_cost); init_cost = NULL; for (i = 0; i < MAX_RECOG_OPERANDS; i++) { - if (op_costs[i] != NULL) - free (op_costs[i]); - if (this_op_costs[i] != NULL) - free (this_op_costs[i]); + free (op_costs[i]); + free (this_op_costs[i]); op_costs[i] = this_op_costs[i] = NULL; } - if (temp_costs != NULL) - free (temp_costs); + free (temp_costs); temp_costs = NULL; } diff --git a/gcc/ira.c b/gcc/ira.c index 054f4ca..49f3e76 100644 --- a/gcc/ira.c +++ b/gcc/ira.c @@ -1556,16 +1556,11 @@ free_register_move_costs (void) for (mode = 0; mode < MAX_MACHINE_MODE; mode++) { - if (ira_max_register_move_cost[mode] != NULL) - free (ira_max_register_move_cost[mode]); - if (ira_may_move_in_cost[mode] != NULL) - free (ira_may_move_in_cost[mode]); - if (ira_may_move_out_cost[mode] != NULL) - free (ira_may_move_out_cost[mode]); - if (ira_max_may_move_in_cost[mode] != NULL) - free (ira_max_may_move_in_cost[mode]); - if (ira_max_may_move_out_cost[mode] != NULL) - free (ira_max_may_move_out_cost[mode]); + free (ira_max_register_move_cost[mode]); + free (ira_may_move_in_cost[mode]); + free (ira_may_move_out_cost[mode]); + free (ira_max_may_move_in_cost[mode]); + free (ira_max_may_move_out_cost[mode]); ira_register_move_cost[mode] = NULL; ira_max_register_move_cost[mode] = NULL; ira_may_move_in_cost[mode] = NULL; @@ -3461,8 +3456,7 @@ build_insn_chain (void) } for (i = 0; i < (unsigned int) max_regno; i++) - if (live_subregs[i]) - free (live_subregs[i]); + free (live_subregs[i]); reload_insn_chain = c; *p = NULL; diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index a96b507..3d4854d 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,7 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * jcf-parse.c (java_parse_file): Remove useless if-before-free. + 2011-04-14 Nathan Froyd <froy...@codesourcery.com> * decl.c (poplevel): Use BLOCK_CHAIN and block_chainon. @@ -22467,7 +22471,7 @@ Tue Mar 9 11:52:08 1999 Alexandre Petit-Bianco <apbia...@cygnus.com> Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, -2006, 2007, 2008, 2009 Free Software Foundation, Inc. +2006, 2007, 2008, 2009, 2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff --git a/gcc/java/jcf-parse.c b/gcc/java/jcf-parse.c index feeddad..eb3f02b 100644 --- a/gcc/java/jcf-parse.c +++ b/gcc/java/jcf-parse.c @@ -1843,8 +1843,7 @@ java_parse_file (void) list = next; } - if (file_list != NULL) - free (file_list); + free (file_list); if (filename_count == 0) warning (0, "no input file specified"); diff --git a/gcc/matrix-reorg.c b/gcc/matrix-reorg.c index 44daa27..6f75d33 100644 --- a/gcc/matrix-reorg.c +++ b/gcc/matrix-reorg.c @@ -529,12 +529,9 @@ mat_free (void *e) if (!mat) return; - if (mat->free_stmts) - free (mat->free_stmts); - if (mat->dim_hot_level) - free (mat->dim_hot_level); - if (mat->malloc_for_level) - free (mat->malloc_for_level); + free (mat->free_stmts); + free (mat->dim_hot_level); + free (mat->malloc_for_level); } /* Find all potential matrices. diff --git a/gcc/prefix.c b/gcc/prefix.c index 67ebdd9..90261ae 100644 --- a/gcc/prefix.c +++ b/gcc/prefix.c @@ -103,8 +103,7 @@ get_key_value (char *key) if (prefix == 0) prefix = std_prefix; - if (temp) - free (temp); + free (temp); return prefix; } diff --git a/gcc/profile.c b/gcc/profile.c index fd37748..e40bfec 100644 --- a/gcc/profile.c +++ b/gcc/profile.c @@ -828,8 +828,7 @@ compute_value_histograms (histogram_values values) } for (t = 0; t < GCOV_N_VALUE_COUNTERS; t++) - if (histogram_counts[t]) - free (histogram_counts[t]); + free (histogram_counts[t]); } /* The entry basic block will be moved around so that it has index=1, diff --git a/gcc/reload1.c b/gcc/reload1.c index b4f3aec..736da51 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -4213,10 +4213,8 @@ free_reg_equiv (void) int i; - if (offsets_known_at) - free (offsets_known_at); - if (offsets_at) - free (offsets_at); + free (offsets_known_at); + free (offsets_at); offsets_at = 0; offsets_known_at = 0; diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index 6abef8b..09bf65d 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -3547,8 +3547,7 @@ free_deps (struct deps_desc *deps) /* As we initialize reg_last lazily, it is possible that we didn't allocate it at all. */ - if (deps->reg_last) - free (deps->reg_last); + free (deps->reg_last); deps->reg_last = NULL; deps = NULL; diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index a6daa58..a12617c 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -581,8 +581,7 @@ fence_clear (fence_t f) gcc_assert ((s != NULL && dc != NULL && tc != NULL) || (s == NULL && dc == NULL && tc == NULL)); - if (s != NULL) - free (s); + free (s); if (dc != NULL) delete_deps_context (dc); diff --git a/gcc/sese.c b/gcc/sese.c index bfb0276..3ce83b9 100644 --- a/gcc/sese.c +++ b/gcc/sese.c @@ -449,8 +449,7 @@ set_rename (htab_t rename_map, tree old_name, tree expr) if (!slot) return; - if (*slot) - free (*slot); + free (*slot); *slot = new_rename_map_elt (old_name, expr); } @@ -676,8 +675,7 @@ if_region_set_false_region (ifsese if_region, sese region) SESE_EXIT (region) = false_edge; - if (if_region->false_region) - free (if_region->false_region); + free (if_region->false_region); if_region->false_region = region; if (slot) diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c index e01c677..0460605 100644 --- a/gcc/tree-data-ref.c +++ b/gcc/tree-data-ref.c @@ -5127,11 +5127,9 @@ free_rdg (struct graph *rdg) struct graph_edge *e; for (e = v->succ; e; e = e->succ_next) - if (e->data) - free (e->data); + free (e->data); - if (v->data) - free (v->data); + free (v->data); } htab_delete (rdg->indices); diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index f189b9b..948a796 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -1617,8 +1617,7 @@ lower_try_finally (struct leh_state *state, gimple tp) } VEC_free (tree, heap, this_tf.dest_array); - if (this_tf.goto_queue) - free (this_tf.goto_queue); + free (this_tf.goto_queue); if (this_tf.goto_queue_map) pointer_map_destroy (this_tf.goto_queue_map); diff --git a/gcc/tree-ssa-coalesce.c b/gcc/tree-ssa-coalesce.c index e7490e6..2dfe37e 100644 --- a/gcc/tree-ssa-coalesce.c +++ b/gcc/tree-ssa-coalesce.c @@ -242,8 +242,7 @@ delete_coalesce_list (coalesce_list_p cl) { gcc_assert (cl->cost_one_list == NULL); htab_delete (cl->list); - if (cl->sorted) - free (cl->sorted); + free (cl->sorted); gcc_assert (cl->num_sorted == 0); free (cl); } diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c index c99d987..4216b22 100644 --- a/gcc/tree-ssa-live.c +++ b/gcc/tree-ssa-live.c @@ -157,10 +157,8 @@ delete_var_map (var_map map) { var_map_base_fini (map); partition_delete (map->var_partition); - if (map->partition_to_view) - free (map->partition_to_view); - if (map->view_to_partition) - free (map->view_to_partition); + free (map->partition_to_view); + free (map->view_to_partition); free (map); } diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index 0aa21e0..b00b8d4 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -6254,8 +6254,7 @@ free_loop_data (struct ivopts_data *data) struct version_info *info; info = ver_info (data, i); - if (info->iv) - free (info->iv); + free (info->iv); info->iv = NULL; info->has_nonlin_use = false; info->preserve_biv = false; @@ -6282,8 +6281,7 @@ free_loop_data (struct ivopts_data *data) { struct iv_cand *cand = iv_cand (data, i); - if (cand->iv) - free (cand->iv); + free (cand->iv); if (cand->depends_on) BITMAP_FREE (cand->depends_on); free (cand); diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index df2a138..0015b72 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -580,8 +580,7 @@ phi_trans_add (pre_expr e, pre_expr v, basic_block pred) slot = htab_find_slot_with_hash (phi_translate_table, new_pair, new_pair->hashcode, INSERT); - if (*slot) - free (*slot); + free (*slot); *slot = (void *) new_pair; } diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index cfd07d4..2b338f5 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,10 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * files.c (destroy_cpp_file): Remove useless if-before-free. + * init.c (cpp_destroy): Likewise. + * macro.c (replace_args): Likewise. + * pch.c (cpp_valid_state): Likewise. + 2011-03-25 Kai Tietz <kti...@redhat.com> * files.c (file_hash_eq): Use filename_cmp diff --git a/libcpp/files.c b/libcpp/files.c index e3cff49..cd0bc48 100644 --- a/libcpp/files.c +++ b/libcpp/files.c @@ -996,8 +996,7 @@ make_cpp_file (cpp_reader *pfile, cpp_dir *dir, const char *fname) static void destroy_cpp_file (_cpp_file *file) { - if (file->buffer_start) - free ((void *) file->buffer_start); + free ((void *) file->buffer_start); free ((void *) file->name); free (file); } diff --git a/libcpp/init.c b/libcpp/init.c index 5c6dacf..5ba6666 100644 --- a/libcpp/init.c +++ b/libcpp/init.c @@ -259,8 +259,7 @@ cpp_destroy (cpp_reader *pfile) while (CPP_BUFFER (pfile) != NULL) _cpp_pop_buffer (pfile); - if (pfile->out.base) - free (pfile->out.base); + free (pfile->out.base); if (pfile->macro_buffer) { diff --git a/libcpp/macro.c b/libcpp/macro.c index d9324a3..eba2349 100644 --- a/libcpp/macro.c +++ b/libcpp/macro.c @@ -1064,8 +1064,7 @@ replace_args (cpp_reader *pfile, cpp_hashnode *node, cpp_macro *macro, macro_arg /* Free the expanded arguments. */ for (i = 0; i < macro->paramc; i++) - if (args[i].expanded) - free (args[i].expanded); + free (args[i].expanded); push_ptoken_context (pfile, node, buff, first, dest - first); } diff --git a/libcpp/pch.c b/libcpp/pch.c index 00b7794..d278f14 100644 --- a/libcpp/pch.c +++ b/libcpp/pch.c @@ -713,12 +713,9 @@ cpp_valid_state (cpp_reader *r, const char *name, int fd) return -1; fail: - if (namebuf != NULL) - free (namebuf); - if (undeftab != NULL) - free (undeftab); - if (nl.defs != NULL) - free (nl.defs); + free (namebuf); + free (undeftab); + free (nl.defs); return 1; } diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog index 75e4a8e..94b7d72 100644 --- a/libdecnumber/ChangeLog +++ b/libdecnumber/ChangeLog @@ -1,3 +1,12 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * decNumber.c (decNumberFromString): Remove useless + if-before-free test. + (decNumberCompareTotalMag, decNumberExp, decNumberFMA): Likewise. + (decNumberLn, decNumberLog10, decNumberPower): Likewise. + (decNumberReduce, decNumberSquareRoot, decAddOp): Likewise. + (decDivideOp, NEEDTWO, decExpOp, LN2): Likewise. + 2011-03-28 Mike Frysinger <vap...@gentoo.org> * .gitignore: New file. diff --git a/libdecnumber/decNumber.c b/libdecnumber/decNumber.c index d097cab..cf2d32e 100644 --- a/libdecnumber/decNumber.c +++ b/libdecnumber/decNumber.c @@ -711,7 +711,7 @@ decNumber * decNumberFromString(decNumber *dn, const char chars[], /* decNumberShow(dn); */ } while(0); /* [for break] */ - if (allocres!=NULL) free(allocres); /* drop any storage used */ + free(allocres); /* drop any storage used */ if (status!=0) decStatus(dn, status, set); return dn; } /* decNumberFromString */ @@ -970,8 +970,8 @@ decNumber * decNumberCompareTotalMag(decNumber *res, const decNumber *lhs, decCompareOp(res, lhs, rhs, set, COMPTOTAL, &status); } while(0); /* end protected */ - if (allocbufa!=NULL) free(allocbufa); /* drop any storage used */ - if (allocbufb!=NULL) free(allocbufb); /* .. */ + free(allocbufa); /* drop any storage used */ + free(allocbufb); /* .. */ if (status!=0) decStatus(res, status, set); return res; } /* decNumberCompareTotalMag */ @@ -1074,7 +1074,7 @@ decNumber * decNumberExp(decNumber *res, const decNumber *rhs, } while(0); /* end protected */ #if DECSUBSET - if (allocrhs !=NULL) free(allocrhs); /* drop any storage used */ + free(allocrhs); /* drop any storage used */ #endif /* apply significant status */ if (status!=0) decStatus(res, status, set); @@ -1169,7 +1169,7 @@ decNumber * decNumberFMA(decNumber *res, const decNumber *lhs, decAddOp(res, acc, fhs, set, 0, &status); } while(0); /* end protected */ - if (allocbufa!=NULL) free(allocbufa); /* drop any storage used */ + free(allocbufa); /* drop any storage used */ if (status!=0) decStatus(res, status, set); #if DECCHECK decCheckInexact(res, set); @@ -1296,7 +1296,7 @@ decNumber * decNumberLn(decNumber *res, const decNumber *rhs, } while(0); /* end protected */ #if DECSUBSET - if (allocrhs !=NULL) free(allocrhs); /* drop any storage used */ + free(allocrhs); /* drop any storage used */ #endif /* apply significant status */ if (status!=0) decStatus(res, status, set); @@ -1509,10 +1509,10 @@ decNumber * decNumberLog10(decNumber *res, const decNumber *rhs, decDivideOp(res, a, b, &aset, DIVIDE, &status); /* into result */ } while(0); /* [for break] */ - if (allocbufa!=NULL) free(allocbufa); /* drop any storage used */ - if (allocbufb!=NULL) free(allocbufb); /* .. */ + free(allocbufa); /* drop any storage used */ + free(allocbufb); /* .. */ #if DECSUBSET - if (allocrhs !=NULL) free(allocrhs); /* .. */ + free(allocrhs); /* .. */ #endif /* apply significant status */ if (status!=0) decStatus(res, status, set); @@ -2253,11 +2253,11 @@ decNumber * decNumberPower(decNumber *res, const decNumber *lhs, #endif } while(0); /* end protected */ - if (allocdac!=NULL) free(allocdac); /* drop any storage used */ - if (allocinv!=NULL) free(allocinv); /* .. */ + free(allocdac); /* drop any storage used */ + free(allocinv); /* .. */ #if DECSUBSET - if (alloclhs!=NULL) free(alloclhs); /* .. */ - if (allocrhs!=NULL) free(allocrhs); /* .. */ + free(alloclhs); /* .. */ + free(allocrhs); /* .. */ #endif if (status!=0) decStatus(res, status, set); #if DECCHECK @@ -2349,7 +2349,7 @@ decNumber * decNumberReduce(decNumber *res, const decNumber *rhs, } while(0); /* end protected */ #if DECSUBSET - if (allocrhs !=NULL) free(allocrhs); /* .. */ + free(allocrhs); /* .. */ #endif if (status!=0) decStatus(res, status, set);/* then report status */ return res; @@ -3111,11 +3111,11 @@ decNumber * decNumberSquareRoot(decNumber *res, const decNumber *rhs, decNumberCopy(res, a); /* a is now the result */ } while(0); /* end protected */ - if (allocbuff!=NULL) free(allocbuff); /* drop any storage used */ - if (allocbufa!=NULL) free(allocbufa); /* .. */ - if (allocbufb!=NULL) free(allocbufb); /* .. */ + free(allocbuff); /* drop any storage used */ + free(allocbufa); /* .. */ + free(allocbufb); /* .. */ #if DECSUBSET - if (allocrhs !=NULL) free(allocrhs); /* .. */ + free(allocrhs); /* .. */ #endif if (status!=0) decStatus(res, status, set);/* then report status */ #if DECCHECK @@ -4130,10 +4130,10 @@ static decNumber * decAddOp(decNumber *res, const decNumber *lhs, } } while(0); /* end protected */ - if (allocacc!=NULL) free(allocacc); /* drop any storage used */ + free(allocacc); /* drop any storage used */ #if DECSUBSET - if (allocrhs!=NULL) free(allocrhs); /* .. */ - if (alloclhs!=NULL) free(alloclhs); /* .. */ + free(allocrhs); /* .. */ + free(alloclhs); /* .. */ #endif return res; } /* decAddOp */ @@ -4782,11 +4782,11 @@ static decNumber * decDivideOp(decNumber *res, #endif } while(0); /* end protected */ - if (varalloc!=NULL) free(varalloc); /* drop any storage used */ - if (allocacc!=NULL) free(allocacc); /* .. */ + free(varalloc); /* drop any storage used */ + free(allocacc); /* .. */ #if DECSUBSET - if (allocrhs!=NULL) free(allocrhs); /* .. */ - if (alloclhs!=NULL) free(alloclhs); /* .. */ + free(allocrhs); /* .. */ + free(alloclhs); /* .. */ #endif return res; } /* decDivideOp */ @@ -5127,14 +5127,14 @@ static decNumber * decMultiplyOp(decNumber *res, const decNumber *lhs, decFinish(res, set, &residue, status); /* final cleanup */ } while(0); /* end protected */ - if (allocacc!=NULL) free(allocacc); /* drop any storage used */ + free(allocacc); /* drop any storage used */ #if DECSUBSET - if (allocrhs!=NULL) free(allocrhs); /* .. */ - if (alloclhs!=NULL) free(alloclhs); /* .. */ + free(allocrhs); /* .. */ + free(alloclhs); /* .. */ #endif #if FASTMUL - if (allocrhi!=NULL) free(allocrhi); /* .. */ - if (alloclhi!=NULL) free(alloclhi); /* .. */ + free(allocrhi); /* .. */ + free(alloclhi); /* .. */ #endif return res; } /* decMultiplyOp */ @@ -5483,9 +5483,9 @@ decNumber * decExpOp(decNumber *res, const decNumber *rhs, decFinish(res, set, &residue, status); /* cleanup/set flags */ } while(0); /* end protected */ - if (allocrhs !=NULL) free(allocrhs); /* drop any storage used */ - if (allocbufa!=NULL) free(allocbufa); /* .. */ - if (allocbuft!=NULL) free(allocbuft); /* .. */ + free(allocrhs); /* drop any storage used */ + free(allocbufa); /* .. */ + free(allocbuft); /* .. */ /* [status is handled by caller] */ return res; } /* decExpOp */ @@ -5794,8 +5794,8 @@ decNumber * decLnOp(decNumber *res, const decNumber *rhs, decFinish(res, set, &residue, status); /* cleanup/set flags */ } while(0); /* end protected */ - if (allocbufa!=NULL) free(allocbufa); /* drop any storage used */ - if (allocbufb!=NULL) free(allocbufb); /* .. */ + free(allocbufa); /* drop any storage used */ + free(allocbufb); /* .. */ /* [status is handled by caller] */ return res; } /* decLnOp */ @@ -5959,8 +5959,8 @@ static decNumber * decQuantizeOp(decNumber *res, const decNumber *lhs, } while(0); /* end protected */ #if DECSUBSET - if (allocrhs!=NULL) free(allocrhs); /* drop any storage used */ - if (alloclhs!=NULL) free(alloclhs); /* .. */ + free(allocrhs); /* drop any storage used */ + free(alloclhs); /* .. */ #endif return res; } /* decQuantizeOp */ @@ -6142,8 +6142,8 @@ decNumber * decCompareOp(decNumber *res, const decNumber *lhs, } } #if DECSUBSET - if (allocrhs!=NULL) free(allocrhs); /* free any storage used */ - if (alloclhs!=NULL) free(alloclhs); /* .. */ + free(allocrhs); /* free any storage used */ + free(alloclhs); /* .. */ #endif return res; } /* decCompareOp */ @@ -6277,7 +6277,7 @@ static Int decUnitCompare(const Unit *a, Int alength, result=(*u==0 ? 0 : +1); } /* clean up and return the result */ - if (allocacc!=NULL) free(allocacc); /* drop any storage used */ + free(allocacc); /* drop any storage used */ return result; } /* decUnitCompare */ diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f4b19f8..0c331df 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,13 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * intrinsics/move_alloc.c (move_alloc): Remove useless + if-before-free test. + * io/fbuf.c (fbuf_destroy): Likewise. + * io/format.c (save_parsed_format): Likewise. + * io/open.c (already_open): Likewise. + * io/unit.c (free_internal_unit, close_unit_1): Likewise. + * io/unix.c (mem_close): Likewise. + 2011-04-17 Jerry DeLisle <jvdeli...@gcc.gnu.org> PR libgfortran/48602 diff --git a/libgfortran/intrinsics/move_alloc.c b/libgfortran/intrinsics/move_alloc.c index 9b5497c..f76c20c 100644 --- a/libgfortran/intrinsics/move_alloc.c +++ b/libgfortran/intrinsics/move_alloc.c @@ -37,8 +37,7 @@ move_alloc (gfc_array_char * from, gfc_array_char * to) { int i; - if (to->data) - free (to->data); + free (to->data); for (i = 0; i < GFC_DESCRIPTOR_RANK (from); i++) { diff --git a/libgfortran/io/fbuf.c b/libgfortran/io/fbuf.c index 82b3f6b..353e5ae 100644 --- a/libgfortran/io/fbuf.c +++ b/libgfortran/io/fbuf.c @@ -51,8 +51,7 @@ fbuf_destroy (gfc_unit * u) { if (u->fbuf == NULL) return; - if (u->fbuf->buf) - free (u->fbuf->buf); + free (u->fbuf->buf); free (u->fbuf); u->fbuf = NULL; } diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index 5760e0c..518dc80 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -149,8 +149,7 @@ save_parsed_format (st_parameter_dt *dtp) free_format_data (u->format_hash_table[hash].hashed_fmt); u->format_hash_table[hash].hashed_fmt = NULL; - if (u->format_hash_table[hash].key != NULL) - free (u->format_hash_table[hash].key); + free (u->format_hash_table[hash].key); u->format_hash_table[hash].key = get_mem (dtp->format_len); memcpy (u->format_hash_table[hash].key, dtp->format, dtp->format_len); diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c index bcf7941..b26d14d 100644 --- a/libgfortran/io/open.c +++ b/libgfortran/io/open.c @@ -688,8 +688,7 @@ already_open (st_parameter_open *opp, gfc_unit * u, unit_flags * flags) } u->s = NULL; - if (u->file) - free (u->file); + free (u->file); u->file = NULL; u->file_len = 0; diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c index 1d52217..e8a9b84 100644 --- a/libgfortran/io/unit.c +++ b/libgfortran/io/unit.c @@ -483,11 +483,9 @@ free_internal_unit (st_parameter_dt *dtp) if (dtp->u.p.current_unit != NULL) { - if (dtp->u.p.current_unit->ls != NULL) - free (dtp->u.p.current_unit->ls); + free (dtp->u.p.current_unit->ls); - if (dtp->u.p.current_unit->s) - free (dtp->u.p.current_unit->s); + free (dtp->u.p.current_unit->s); destroy_unit_mutex (dtp->u.p.current_unit); } @@ -652,8 +650,7 @@ close_unit_1 (gfc_unit *u, int locked) delete_unit (u); - if (u->file) - free (u->file); + free (u->file); u->file = NULL; u->file_len = 0; diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 4295071..ee2fd17 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -850,8 +850,7 @@ mem_flush (unix_stream * s __attribute__ ((unused))) static int mem_close (unix_stream * s) { - if (s != NULL) - free (s); + free (s); return 0; } diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index a15ffa5..c60624f 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,16 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * cp-demint.c (cplus_demangle_v3_components): Remove useless + if-before-free. + * cplus-dem.c (squangle_mop_up): Likewise. + (delete_non_B_K_work_stuff): Likewise. + * pex-common.c (pex_free): Likewise. + * pex-msdos.c (pex_msdos_cleanup): Likewise. + * pex-win32.c (mingw_rootify, msys_rootify): Likewise. + (win32_spawn): Likewise. + * regex.c (FREE_VAR, weak_alias): Likewise. + * spaces.c (spaces): Likewise. + 2011-04-10 Jim Meyering <meyer...@redhat.com> Avoid memory overrun in a test leading to potential double-free. diff --git a/libiberty/cp-demint.c b/libiberty/cp-demint.c index 2e8f8d2..1d1a77a 100644 --- a/libiberty/cp-demint.c +++ b/libiberty/cp-demint.c @@ -206,10 +206,8 @@ cplus_demangle_v3_components (const char *mangled, int options, void **mem) malloc (di.num_subs * sizeof (struct demangle_component *))); if (di.comps == NULL || di.subs == NULL) { - if (di.comps != NULL) - free (di.comps); - if (di.subs != NULL) - free (di.subs); + free (di.comps); + free (di.subs); return NULL; } diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c index 84f94b6..e948487 100644 --- a/libiberty/cplus-dem.c +++ b/libiberty/cplus-dem.c @@ -1311,8 +1311,7 @@ delete_non_B_K_work_stuff (struct work_stuff *work) int i; for (i = 0; i < work->ntmpl_args; i++) - if (work->tmpl_argvec[i]) - free ((char*) work->tmpl_argvec[i]); + free ((char*) work->tmpl_argvec[i]); free ((char*) work->tmpl_argvec); work->tmpl_argvec = NULL; diff --git a/libiberty/pex-common.c b/libiberty/pex-common.c index 55b63ae..6fd3fde 100644 --- a/libiberty/pex-common.c +++ b/libiberty/pex-common.c @@ -623,12 +623,9 @@ pex_free (struct pex_obj *obj) if (obj->next_input_name_allocated) free (obj->next_input_name); - if (obj->children != NULL) - free (obj->children); - if (obj->status != NULL) - free (obj->status); - if (obj->time != NULL) - free (obj->time); + free (obj->children); + free (obj->status); + free (obj->time); if (obj->remove_count > 0) { diff --git a/libiberty/pex-msdos.c b/libiberty/pex-msdos.c index 4b77bf6..fa0f40a 100644 --- a/libiberty/pex-msdos.c +++ b/libiberty/pex-msdos.c @@ -310,10 +310,8 @@ pex_msdos_cleanup (struct pex_obj *obj) ms = (struct pex_msdos *) obj->sysdep; for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i) - if (msdos->files[i] != NULL) - free (msdos->files[i]); - if (msdos->statuses != NULL) - free (msdos->statuses); + free (msdos->files[i]); + free (msdos->statuses); free (msdos); obj->sysdep = NULL; } diff --git a/libiberty/pex-win32.c b/libiberty/pex-win32.c index 4427406..107ac6f 100644 --- a/libiberty/pex-win32.c +++ b/libiberty/pex-win32.c @@ -210,10 +210,8 @@ mingw_rootify (const char *executable) if (!namebuf || !foundbuf) { RegCloseKey (hKey); - if (namebuf) - free (namebuf); - if (foundbuf) - free (foundbuf); + free (namebuf); + free (foundbuf); return executable; } @@ -315,8 +313,7 @@ msys_rootify (const char *executable) return tack_on_executable (buf, executable); /* failed */ - if (buf) - free (buf); + free (buf); return executable; } #endif @@ -607,8 +604,7 @@ win32_spawn (const char *executable, si, pi)) { - if (env_block) - free (env_block); + free (env_block); free (full_executable); @@ -618,18 +614,14 @@ win32_spawn (const char *executable, /* Clean up. */ CloseHandle (pi->hThread); free (full_executable); - if (env_block) - free (env_block); + free (env_block); return (pid_t) pi->hProcess; error: - if (env_block) - free (env_block); - if (cmdline) - free (cmdline); - if (full_executable) - free (full_executable); + free (env_block); + free (cmdline); + free (full_executable); return (pid_t) -1; } diff --git a/libiberty/regex.c b/libiberty/regex.c index 420c7f4..d65eedb 100644 --- a/libiberty/regex.c +++ b/libiberty/regex.c @@ -4970,7 +4970,7 @@ weak_alias (__re_search_2, re_search_2) #ifdef MATCH_MAY_ALLOCATE # define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL #else -# define FREE_VAR(var) if (var) free (var); var = NULL +# define FREE_VAR(var) free (var); var = NULL #endif #ifdef WCHAR @@ -8111,20 +8111,17 @@ weak_alias (__regerror, regerror) void regfree (regex_t *preg) { - if (preg->buffer != NULL) - free (preg->buffer); + free (preg->buffer); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; - if (preg->fastmap != NULL) - free (preg->fastmap); + free (preg->fastmap); preg->fastmap = NULL; preg->fastmap_accurate = 0; - if (preg->translate != NULL) - free (preg->translate); + free (preg->translate); preg->translate = NULL; } #ifdef _LIBC diff --git a/libiberty/spaces.c b/libiberty/spaces.c index 67481c9..69d7a2d 100644 --- a/libiberty/spaces.c +++ b/libiberty/spaces.c @@ -53,10 +53,7 @@ spaces (int count) if (count > maxsize) { - if (buf) - { - free (buf); - } + free (buf); buf = (char *) malloc (count + 1); if (buf == (char *) 0) return 0; diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index dd2b053..22b9fea 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * libsupc++/del_opnt.cc (operator delete): Remove useless + if-before-free. + 2011-04-17 Paolo Carlini <paolo.carl...@oracle.com> * testsuite/25_algorithms/partition/moveable.cc: Actually run diff --git a/libstdc++-v3/libsupc++/del_opnt.cc b/libstdc++-v3/libsupc++/del_opnt.cc index 75051d5..29eab10 100644 --- a/libstdc++-v3/libsupc++/del_opnt.cc +++ b/libstdc++-v3/libsupc++/del_opnt.cc @@ -31,6 +31,5 @@ extern "C" void free (void *); _GLIBCXX_WEAK_DEFINITION void operator delete (void *ptr, const std::nothrow_t&) throw () { - if (ptr) - free (ptr); + free (ptr); } diff --git a/lto-plugin/ChangeLog b/lto-plugin/ChangeLog index 2e63db3..daf3da1 100644 --- a/lto-plugin/ChangeLog +++ b/lto-plugin/ChangeLog @@ -1,3 +1,7 @@ +2011-04-15 Jim Meyering <meyer...@redhat.com> + + * lto-plugin.c (free_1, free_2): Remove useless if-before-free. + 2011-04-05 Richard Guenther <rguent...@suse.de> PR bootstrap/48431 diff --git a/lto-plugin/lto-plugin.c b/lto-plugin/lto-plugin.c index 661f10c..4b5828b 100644 --- a/lto-plugin/lto-plugin.c +++ b/lto-plugin/lto-plugin.c @@ -312,8 +312,7 @@ free_1 (void) { struct ld_plugin_symbol *s = &symtab->syms[j]; free (s->name); - if (s->comdat_key) - free (s->comdat_key); + free (s->comdat_key); } free (symtab->syms); symtab->syms = NULL; @@ -342,8 +341,7 @@ free_2 (void) claimed_files = NULL; num_claimed_files = 0; - if (arguments_file_name) - free (arguments_file_name); + free (arguments_file_name); arguments_file_name = NULL; } -- 1.7.5.rc2.295.g19c42