gcov.c (STRING_SIZE): Remove.
* gcov.c (STRING_SIZE): Remove. (generate_results): Erase annotations for source files with no coverage information. (read_line): New. (output_lines): Use it. From-SVN: r183105
This commit is contained in:
parent
3ad065efe1
commit
8f961b2265
2 changed files with 77 additions and 46 deletions
|
@ -1,3 +1,11 @@
|
|||
2012-01-11 Nathan Sidwell <nathan@acm.org>
|
||||
|
||||
* gcov.c (STRING_SIZE): Remove.
|
||||
(generate_results): Erase annotations for source files with no
|
||||
coverage information.
|
||||
(read_line): New.
|
||||
(output_lines): Use it.
|
||||
|
||||
2012-01-11 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gimple.h (gimplify_body): Remove first argument.
|
||||
|
|
115
gcc/gcov.c
115
gcc/gcov.c
|
@ -64,8 +64,6 @@ along with Gcov; see the file COPYING3. If not see
|
|||
|
||||
/* This is the size of the buffer used to read in source file lines. */
|
||||
|
||||
#define STRING_SIZE 200
|
||||
|
||||
struct function_info;
|
||||
struct block_info;
|
||||
struct source_info;
|
||||
|
@ -708,24 +706,33 @@ generate_results (const char *file_name)
|
|||
function_summary (&src->coverage, "File");
|
||||
total_lines += src->coverage.lines;
|
||||
total_executed += src->coverage.lines_executed;
|
||||
if (flag_gcov_file && src->coverage.lines)
|
||||
if (flag_gcov_file)
|
||||
{
|
||||
char *gcov_file_name
|
||||
= make_gcov_file_name (file_name, src->coverage.name);
|
||||
FILE *gcov_file = fopen (gcov_file_name, "w");
|
||||
|
||||
if (gcov_file)
|
||||
if (src->coverage.lines)
|
||||
{
|
||||
fnotice (stdout, "Creating '%s'\n", gcov_file_name);
|
||||
output_lines (gcov_file, src);
|
||||
if (ferror (gcov_file))
|
||||
FILE *gcov_file = fopen (gcov_file_name, "w");
|
||||
|
||||
if (gcov_file)
|
||||
{
|
||||
fnotice (stdout, "Creating '%s'\n", gcov_file_name);
|
||||
output_lines (gcov_file, src);
|
||||
if (ferror (gcov_file))
|
||||
fnotice (stderr, "Error writing output file '%s'\n",
|
||||
gcov_file_name);
|
||||
fclose (gcov_file);
|
||||
fclose (gcov_file);
|
||||
}
|
||||
else
|
||||
fnotice (stderr, "Could not open output file '%s'\n",
|
||||
gcov_file_name);
|
||||
}
|
||||
else
|
||||
fnotice (stderr, "Could not open output file '%s'\n",
|
||||
gcov_file_name);
|
||||
{
|
||||
unlink (gcov_file_name);
|
||||
fnotice (stdout, "Removing '%s'\n", gcov_file_name);
|
||||
}
|
||||
free (gcov_file_name);
|
||||
}
|
||||
fnotice (stdout, "\n");
|
||||
|
@ -2188,6 +2195,44 @@ output_branch_count (FILE *gcov_file, int ix, const arc_t *arc)
|
|||
|
||||
}
|
||||
|
||||
static const char *
|
||||
read_line (FILE *file)
|
||||
{
|
||||
static char *string;
|
||||
static size_t string_len;
|
||||
size_t pos = 0;
|
||||
char *ptr;
|
||||
|
||||
if (!string_len)
|
||||
{
|
||||
string_len = 200;
|
||||
string = XNEWVEC (char, string_len);
|
||||
}
|
||||
|
||||
while ((ptr = fgets (string + pos, string_len - pos, file)))
|
||||
{
|
||||
size_t len = strlen (string + pos);
|
||||
|
||||
if (string[pos + len - 1] == '\n')
|
||||
{
|
||||
string[pos + len - 1] = 0;
|
||||
return string;
|
||||
}
|
||||
pos += len;
|
||||
ptr = XNEWVEC (char, string_len * 2);
|
||||
if (ptr)
|
||||
{
|
||||
memcpy (ptr, string, pos);
|
||||
string = ptr;
|
||||
string_len += 2;
|
||||
}
|
||||
else
|
||||
pos = 0;
|
||||
}
|
||||
|
||||
return pos ? string : NULL;
|
||||
}
|
||||
|
||||
/* Read in the source file one line at a time, and output that line to
|
||||
the gcov file preceded by its execution count and other
|
||||
information. */
|
||||
|
@ -2198,8 +2243,7 @@ output_lines (FILE *gcov_file, const source_t *src)
|
|||
FILE *source_file;
|
||||
unsigned line_num; /* current line number. */
|
||||
const line_t *line; /* current line info ptr. */
|
||||
char string[STRING_SIZE]; /* line buffer. */
|
||||
char const *retval = ""; /* status of source file reading. */
|
||||
const char *retval = ""; /* status of source file reading. */
|
||||
function_t *fn = NULL;
|
||||
|
||||
fprintf (gcov_file, "%9s:%5d:Source:%s\n", "-", 0, src->coverage.name);
|
||||
|
@ -2246,31 +2290,20 @@ output_lines (FILE *gcov_file, const source_t *src)
|
|||
fprintf (gcov_file, "\n");
|
||||
}
|
||||
|
||||
if (retval)
|
||||
retval = read_line (source_file);
|
||||
|
||||
/* For lines which don't exist in the .bb file, print '-' before
|
||||
the source line. For lines which exist but were never
|
||||
executed, print '#####' before the source line. Otherwise,
|
||||
print the execution count before the source line. There are
|
||||
16 spaces of indentation added before the source line so that
|
||||
tabs won't be messed up. */
|
||||
fprintf (gcov_file, "%9s:%5u:",
|
||||
executed, print '#####' or '=====' before the source line.
|
||||
Otherwise, print the execution count before the source line.
|
||||
There are 16 spaces of indentation added before the source
|
||||
line so that tabs won't be messed up. */
|
||||
fprintf (gcov_file, "%9s:%5u:%s\n",
|
||||
!line->exists ? "-" : line->count
|
||||
? format_gcov (line->count, 0, -1)
|
||||
: line->unexceptional ? "#####" : "=====", line_num);
|
||||
|
||||
if (retval)
|
||||
{
|
||||
/* Copy source line. */
|
||||
do
|
||||
{
|
||||
retval = fgets (string, STRING_SIZE, source_file);
|
||||
if (!retval)
|
||||
break;
|
||||
fputs (retval, gcov_file);
|
||||
}
|
||||
while (!retval[0] || retval[strlen (retval) - 1] != '\n');
|
||||
}
|
||||
if (!retval)
|
||||
fputs ("/*EOF*/\n", gcov_file);
|
||||
: line->unexceptional ? "#####" : "=====", line_num,
|
||||
retval ? retval : "/*EOF*/");
|
||||
|
||||
if (flag_all_blocks)
|
||||
{
|
||||
|
@ -2306,18 +2339,8 @@ output_lines (FILE *gcov_file, const source_t *src)
|
|||
last line of code. */
|
||||
if (retval)
|
||||
{
|
||||
for (; (retval = fgets (string, STRING_SIZE, source_file)); line_num++)
|
||||
{
|
||||
fprintf (gcov_file, "%9s:%5u:%s", "-", line_num, retval);
|
||||
|
||||
while (!retval[0] || retval[strlen (retval) - 1] != '\n')
|
||||
{
|
||||
retval = fgets (string, STRING_SIZE, source_file);
|
||||
if (!retval)
|
||||
break;
|
||||
fputs (retval, gcov_file);
|
||||
}
|
||||
}
|
||||
for (; (retval = read_line (source_file)); line_num++)
|
||||
fprintf (gcov_file, "%9s:%5u:%s\n", "-", line_num, retval);
|
||||
}
|
||||
|
||||
if (source_file)
|
||||
|
|
Loading…
Add table
Reference in a new issue