GCOV: simplify usage of function_info::artificial.
2017-11-13 Martin Liska <mliska@suse.cz> * gcov.c (function_info::is_artificial): New function. (process_file): Erase all artificial early. (generate_results): Skip as all artificial are already removed. From-SVN: r254673
This commit is contained in:
parent
211bea6b40
commit
1e81a283a2
@ -1,3 +1,10 @@
|
||||
2017-11-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* gcov.c (function_info::is_artificial): New function.
|
||||
(process_file): Erase all artificial early.
|
||||
(generate_results): Skip as all artificial are already
|
||||
removed.
|
||||
|
||||
2017-11-13 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* gcov.c (read_graph_file): Store to global vector of functions.
|
||||
|
68
gcc/gcov.c
68
gcc/gcov.c
@ -232,6 +232,14 @@ typedef struct function_info
|
||||
The line must be defined in body of the function, can't be inlined. */
|
||||
bool group_line_p (unsigned n, unsigned src_idx);
|
||||
|
||||
/* Function filter based on function_info::artificial variable. */
|
||||
|
||||
static inline bool
|
||||
is_artificial (function_info *fn)
|
||||
{
|
||||
return fn->artificial;
|
||||
}
|
||||
|
||||
/* Name of function. */
|
||||
char *name;
|
||||
char *demangled_name;
|
||||
@ -1152,33 +1160,40 @@ process_file (const char *file_name)
|
||||
fn_map.put (needle, *it);
|
||||
}
|
||||
|
||||
/* Remove all artificial function. */
|
||||
functions.erase (remove_if (functions.begin (), functions.end (),
|
||||
function_info::is_artificial), functions.end ());
|
||||
|
||||
for (vector<function_t *>::iterator it = functions.begin ();
|
||||
it != functions.end (); it++)
|
||||
{
|
||||
function_t *fn = *it;
|
||||
unsigned src = fn->src;
|
||||
|
||||
if (fn->counts || no_data_file)
|
||||
{
|
||||
unsigned src = fn->src;
|
||||
unsigned block_no;
|
||||
source_info *s = &sources[src];
|
||||
s->functions.push_back (fn);
|
||||
|
||||
/* Process only non-artificial functions. */
|
||||
if (!fn->artificial)
|
||||
/* Mark last line in files touched by function. */
|
||||
for (unsigned block_no = 0; block_no != fn->blocks.size ();
|
||||
block_no++)
|
||||
{
|
||||
source_info *s = &sources[src];
|
||||
s->functions.push_back (fn);
|
||||
|
||||
/* Mark last line in files touched by function. */
|
||||
for (block_no = 0; block_no != fn->blocks.size (); block_no++)
|
||||
block_t *block = &fn->blocks[block_no];
|
||||
for (unsigned i = 0; i < block->locations.size (); i++)
|
||||
{
|
||||
block_t *block = &fn->blocks[block_no];
|
||||
for (unsigned i = 0; i < block->locations.size (); i++)
|
||||
{
|
||||
/* Sort lines of locations. */
|
||||
sort (block->locations[i].lines.begin (),
|
||||
block->locations[i].lines.end ());
|
||||
/* Sort lines of locations. */
|
||||
sort (block->locations[i].lines.begin (),
|
||||
block->locations[i].lines.end ());
|
||||
|
||||
if (!block->locations[i].lines.empty ())
|
||||
if (!block->locations[i].lines.empty ())
|
||||
{
|
||||
s = &sources[block->locations[i].source_file_idx];
|
||||
unsigned last_line
|
||||
= block->locations[i].lines.back ();
|
||||
|
||||
/* Record new lines for the function. */
|
||||
if (last_line >= s->lines.size ())
|
||||
{
|
||||
s = &sources[block->locations[i].source_file_idx];
|
||||
unsigned last_line
|
||||
@ -1192,17 +1207,18 @@ process_file (const char *file_name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Allocate lines for group function, following start_line
|
||||
and end_line information of the function. */
|
||||
if (fn->is_group)
|
||||
fn->lines.resize (fn->end_line - fn->start_line + 1);
|
||||
}
|
||||
|
||||
solve_flow_graph (fn);
|
||||
if (fn->has_catch)
|
||||
find_exception_blocks (fn);
|
||||
}
|
||||
|
||||
/* Allocate lines for group function, following start_line
|
||||
and end_line information of the function. */
|
||||
if (fn->is_group)
|
||||
fn->lines.resize (fn->end_line - fn->start_line + 1);
|
||||
|
||||
|
||||
solve_flow_graph (fn);
|
||||
if (fn->has_catch)
|
||||
find_exception_blocks (fn);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1251,8 +1267,6 @@ generate_results (const char *file_name)
|
||||
{
|
||||
function_t *fn = *it;
|
||||
coverage_t coverage;
|
||||
if (fn->artificial)
|
||||
continue;
|
||||
|
||||
memset (&coverage, 0, sizeof (coverage));
|
||||
coverage.name = flag_demangled_names ? fn->demangled_name : fn->name;
|
||||
|
Loading…
Reference in New Issue
Block a user