From: Jan Hubicka Date: Wed, 20 Aug 2014 16:33:20 +0000 (+0200) Subject: coverage.c (coverage_compute_profile_id): Return non-0; also handle symbols with... X-Git-Tag: releases/gcc-5.1.0~5320 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e04426135293ba4db611f38109161f67bf93379;p=thirdparty%2Fgcc.git coverage.c (coverage_compute_profile_id): Return non-0; also handle symbols with unique name. * coverage.c (coverage_compute_profile_id): Return non-0; also handle symbols with unique name. (coverage_end_function): Do not skip DECL_EXTERNAL functions. From-SVN: r214232 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5960aeb7f362..40c0a99a09d5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-08-20 Jan Hubicka + + * coverage.c (coverage_compute_profile_id): Return non-0; + also handle symbols with unique name. + (coverage_end_function): Do not skip DECL_EXTERNAL functions. + 2014-08-20 Steve Ellcey PR middle-end/49191 diff --git a/gcc/coverage.c b/gcc/coverage.c index dd7655d80ade..34f975de8630 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -579,7 +579,7 @@ coverage_compute_profile_id (struct cgraph_node *n) unsigned chksum; /* Externally visible symbols have unique name. */ - if (TREE_PUBLIC (n->decl) || DECL_EXTERNAL (n->decl)) + if (TREE_PUBLIC (n->decl) || DECL_EXTERNAL (n->decl) || n->unique_name) { chksum = coverage_checksum_string (0, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (n->decl))); @@ -601,8 +601,10 @@ coverage_compute_profile_id (struct cgraph_node *n) (chksum, aux_base_name); } - /* Non-negative integers are hopefully small enough to fit in all targets. */ - return chksum & 0x7fffffff; + /* Non-negative integers are hopefully small enough to fit in all targets. + Gcov file formats wants non-zero function IDs. */ + chksum = chksum & 0x7fffffff; + return chksum + (!chksum); } /* Compute cfg checksum for the function FN given as argument. @@ -692,30 +694,24 @@ coverage_end_function (unsigned lineno_checksum, unsigned cfg_checksum) { struct coverage_data *item = 0; - /* If the function is extern (i.e. extern inline), then we won't - be outputting it, so don't chain it onto the function - list. */ - if (!DECL_EXTERNAL (current_function_decl)) - { - item = ggc_alloc (); + item = ggc_alloc (); - if (PARAM_VALUE (PARAM_PROFILE_FUNC_INTERNAL_ID)) - item->ident = current_function_funcdef_no + 1; - else - { - gcc_assert (coverage_node_map_initialized_p ()); - item->ident = cgraph_node::get (cfun->decl)->profile_id; - } - - item->lineno_checksum = lineno_checksum; - item->cfg_checksum = cfg_checksum; - - item->fn_decl = current_function_decl; - item->next = 0; - *functions_tail = item; - functions_tail = &item->next; + if (PARAM_VALUE (PARAM_PROFILE_FUNC_INTERNAL_ID)) + item->ident = current_function_funcdef_no + 1; + else + { + gcc_assert (coverage_node_map_initialized_p ()); + item->ident = cgraph_node::get (cfun->decl)->profile_id; } + item->lineno_checksum = lineno_checksum; + item->cfg_checksum = cfg_checksum; + + item->fn_decl = current_function_decl; + item->next = 0; + *functions_tail = item; + functions_tail = &item->next; + for (i = 0; i != GCOV_COUNTERS; i++) { tree var = fn_v_ctrs[i];