Mercurial > hg > CbC > CbC_gcc
diff gcc/coverage.c @ 63:b7f97abdc517 gcc-4.6-20100522
update gcc from gcc-4.5.0 to gcc-4.6
author | ryoma <e075725@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 24 May 2010 12:47:05 +0900 |
parents | 77e2b8dfacca |
children | f6334be47118 |
line wrap: on
line diff
--- a/gcc/coverage.c Fri Feb 12 23:41:23 2010 +0900 +++ b/gcc/coverage.c Mon May 24 12:47:05 2010 +0900 @@ -46,6 +46,8 @@ #include "tree-iterator.h" #include "cgraph.h" #include "tree-pass.h" +#include "diagnostic.h" +#include "intl.h" #include "gcov-io.c" @@ -357,34 +359,33 @@ || entry->summary.num != expected) { static int warned = 0; + bool warning_printed = false; tree id = DECL_ASSEMBLER_NAME (current_function_decl); - if (warn_coverage_mismatch) - warning (OPT_Wcoverage_mismatch, "coverage mismatch for function " - "%qE while reading counter %qs", id, ctr_names[counter]); - else - error ("coverage mismatch for function %qE while reading counter %qs", - id, ctr_names[counter]); - - if (!inhibit_warnings) + warning_printed = + warning_at (input_location, OPT_Wcoverage_mismatch, + "coverage mismatch for function " + "%qE while reading counter %qs", id, ctr_names[counter]); + if (warning_printed) { if (entry->checksum != checksum) - inform (input_location, "checksum is %x instead of %x", entry->checksum, checksum); + inform (input_location, "checksum is %x instead of %x", + entry->checksum, checksum); else inform (input_location, "number of counters is %d instead of %d", entry->summary.num, expected); - } - - if (warn_coverage_mismatch - && !inhibit_warnings - && !warned++) - { - inform (input_location, "coverage mismatch ignored due to -Wcoverage-mismatch"); - inform (input_location, flag_guess_branch_prob - ? "execution counts estimated" - : "execution counts assumed to be zero"); - if (!flag_guess_branch_prob) - inform (input_location, "this can result in poorly optimized code"); + + if (!(errorcount || sorrycount) + && !warned++) + { + inform (input_location, "coverage mismatch ignored"); + inform (input_location, flag_guess_branch_prob + ? G_("execution counts estimated") + : G_("execution counts assumed to be zero")); + if (!flag_guess_branch_prob) + inform (input_location, + "this can result in poorly optimized code"); + } } return NULL; @@ -671,40 +672,34 @@ static tree build_fn_info_value (const struct function_list *function, tree type) { - tree value = NULL_TREE; tree fields = TYPE_FIELDS (type); unsigned ix; - tree array_value = NULL_TREE; + VEC(constructor_elt,gc) *v1 = NULL; + VEC(constructor_elt,gc) *v2 = NULL; /* ident */ - value = tree_cons (fields, build_int_cstu (get_gcov_unsigned_t (), - function->ident), value); + CONSTRUCTOR_APPEND_ELT (v1, fields, + build_int_cstu (get_gcov_unsigned_t (), + function->ident)); fields = TREE_CHAIN (fields); /* checksum */ - value = tree_cons (fields, build_int_cstu (get_gcov_unsigned_t (), - function->checksum), value); + CONSTRUCTOR_APPEND_ELT (v1, fields, + build_int_cstu (get_gcov_unsigned_t (), + function->checksum)); fields = TREE_CHAIN (fields); /* counters */ for (ix = 0; ix != GCOV_COUNTERS; ix++) if (prg_ctr_mask & (1 << ix)) - { - tree counters = build_int_cstu (get_gcov_unsigned_t (), - function->n_ctrs[ix]); - - array_value = tree_cons (NULL_TREE, counters, array_value); - } + CONSTRUCTOR_APPEND_ELT (v2, NULL, + build_int_cstu (get_gcov_unsigned_t (), + function->n_ctrs[ix])); - /* FIXME: use build_constructor directly. */ - array_value = build_constructor_from_list (TREE_TYPE (fields), - nreverse (array_value)); - value = tree_cons (fields, array_value, value); + CONSTRUCTOR_APPEND_ELT (v1, fields, + build_constructor (TREE_TYPE (fields), v2)); - /* FIXME: use build_constructor directly. */ - value = build_constructor_from_list (type, nreverse (value)); - - return value; + return build_constructor (type, v1); } /* Creates the gcov_ctr_info RECORD_TYPE. */ @@ -752,15 +747,14 @@ static tree build_ctr_info_value (unsigned int counter, tree type) { - tree value = NULL_TREE; tree fields = TYPE_FIELDS (type); tree fn; + VEC(constructor_elt,gc) *v = NULL; /* counters */ - value = tree_cons (fields, - build_int_cstu (get_gcov_unsigned_t (), - prg_n_ctrs[counter]), - value); + CONSTRUCTOR_APPEND_ELT (v, fields, + build_int_cstu (get_gcov_unsigned_t (), + prg_n_ctrs[counter])); fields = TREE_CHAIN (fields); if (prg_n_ctrs[counter]) @@ -778,13 +772,12 @@ DECL_SIZE_UNIT (tree_ctr_tables[counter]) = TYPE_SIZE_UNIT (array_type); varpool_finalize_decl (tree_ctr_tables[counter]); - value = tree_cons (fields, - build1 (ADDR_EXPR, TREE_TYPE (fields), - tree_ctr_tables[counter]), - value); + CONSTRUCTOR_APPEND_ELT (v, fields, + build1 (ADDR_EXPR, TREE_TYPE (fields), + tree_ctr_tables[counter])); } else - value = tree_cons (fields, null_pointer_node, value); + CONSTRUCTOR_APPEND_ELT (v, fields, null_pointer_node); fields = TREE_CHAIN (fields); fn = build_decl (BUILTINS_LOCATION, @@ -796,14 +789,9 @@ DECL_ARTIFICIAL (fn) = 1; TREE_NOTHROW (fn) = 1; DECL_ASSEMBLER_NAME (fn); /* Initialize assembler name so we can stream out. */ - value = tree_cons (fields, - build1 (ADDR_EXPR, TREE_TYPE (fields), fn), - value); + CONSTRUCTOR_APPEND_ELT (v, fields, build1 (ADDR_EXPR, TREE_TYPE (fields), fn)); - /* FIXME: use build_constructor directly. */ - value = build_constructor_from_list (type, nreverse (value)); - - return value; + return build_constructor (type, v); } /* Creates the gcov_info RECORD_TYPE and initializer for it. Returns a @@ -818,12 +806,13 @@ tree fn_info_ptr_type; tree ctr_info_type, ctr_info_ary_type, ctr_info_value = NULL_TREE; tree field, fields = NULL_TREE; - tree value = NULL_TREE; tree filename_string; int da_file_name_len; unsigned n_fns; const struct function_list *fn; tree string_type; + VEC(constructor_elt,gc) *v1 = NULL; + VEC(constructor_elt,gc) *v2 = NULL; /* Count the number of active counters. */ for (n_ctr_types = 0, ix = 0; ix != GCOV_COUNTERS; ix++) @@ -838,23 +827,23 @@ FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, build_int_cstu (TREE_TYPE (field), GCOV_VERSION), - value); + CONSTRUCTOR_APPEND_ELT (v1, field, + build_int_cstu (TREE_TYPE (field), GCOV_VERSION)); /* next -- NULL */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, build_pointer_type (const_type)); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, null_pointer_node, value); + CONSTRUCTOR_APPEND_ELT (v1, field, null_pointer_node); /* stamp */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, build_int_cstu (TREE_TYPE (field), local_tick), - value); + CONSTRUCTOR_APPEND_ELT (v1, field, + build_int_cstu (TREE_TYPE (field), local_tick)); /* Filename */ string_type = build_pointer_type (build_qualified_type (char_type_node, @@ -868,17 +857,17 @@ TREE_TYPE (filename_string) = build_array_type (char_type_node, build_index_type (build_int_cst (NULL_TREE, da_file_name_len))); - value = tree_cons (field, build1 (ADDR_EXPR, string_type, filename_string), - value); + CONSTRUCTOR_APPEND_ELT (v1, field, + build1 (ADDR_EXPR, string_type, filename_string)); /* Build the fn_info type and initializer. */ fn_info_type = build_fn_info_type (n_ctr_types); fn_info_ptr_type = build_pointer_type (build_qualified_type (fn_info_type, TYPE_QUAL_CONST)); for (fn = functions_head, n_fns = 0; fn; fn = fn->next, n_fns++) - fn_info_value = tree_cons (NULL_TREE, - build_fn_info_value (fn, fn_info_type), - fn_info_value); + CONSTRUCTOR_APPEND_ELT (v2, NULL_TREE, + build_fn_info_value (fn, fn_info_type)); + if (n_fns) { tree array_type; @@ -886,9 +875,7 @@ array_type = build_index_type (build_int_cst (NULL_TREE, n_fns - 1)); array_type = build_array_type (fn_info_type, array_type); - /* FIXME: use build_constructor directly. */ - fn_info_value = build_constructor_from_list (array_type, - nreverse (fn_info_value)); + fn_info_value = build_constructor (array_type, v2); fn_info_value = build1 (ADDR_EXPR, fn_info_ptr_type, fn_info_value); } else @@ -899,52 +886,46 @@ FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, - build_int_cstu (get_gcov_unsigned_t (), n_fns), - value); + CONSTRUCTOR_APPEND_ELT (v1, field, + build_int_cstu (get_gcov_unsigned_t (), n_fns)); /* fn_info table */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, fn_info_ptr_type); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, fn_info_value, value); + CONSTRUCTOR_APPEND_ELT (v1, field, fn_info_value); /* counter_mask */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, - build_int_cstu (get_gcov_unsigned_t (), prg_ctr_mask), - value); + CONSTRUCTOR_APPEND_ELT (v1, field, + build_int_cstu (get_gcov_unsigned_t (), + prg_ctr_mask)); /* counters */ ctr_info_type = build_ctr_info_type (); ctr_info_ary_type = build_index_type (build_int_cst (NULL_TREE, n_ctr_types)); ctr_info_ary_type = build_array_type (ctr_info_type, ctr_info_ary_type); + v2 = NULL; for (ix = 0; ix != GCOV_COUNTERS; ix++) if (prg_ctr_mask & (1 << ix)) - ctr_info_value = tree_cons (NULL_TREE, - build_ctr_info_value (ix, ctr_info_type), - ctr_info_value); - /* FIXME: use build_constructor directly. */ - ctr_info_value = build_constructor_from_list (ctr_info_ary_type, - nreverse (ctr_info_value)); + CONSTRUCTOR_APPEND_ELT (v2, NULL_TREE, + build_ctr_info_value (ix, ctr_info_type)); + ctr_info_value = build_constructor (ctr_info_ary_type, v2); field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, ctr_info_ary_type); TREE_CHAIN (field) = fields; fields = field; - value = tree_cons (field, ctr_info_value, value); + CONSTRUCTOR_APPEND_ELT (v1, field, ctr_info_value); finish_builtin_struct (type, "__gcov_info", fields, NULL_TREE); - /* FIXME: use build_constructor directly. */ - value = build_constructor_from_list (type, nreverse (value)); - - return value; + return build_constructor (type, v1); } /* Write out the structure which libgcov uses to locate all the