aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcov.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2020-10-23 16:20:53 +0200
committerMartin Liska <mliska@suse.cz>2020-10-23 16:22:55 +0200
commit9067a1545085e360c8eb1c95a1b1a4480d9ee0b3 (patch)
tree7575432093358b577ad53c8e19984b1683efac99 /gcc/gcov.c
parentb66b30a807918ee1cf89b3376bb410b9046639b8 (diff)
downloadgcc-9067a1545085e360c8eb1c95a1b1a4480d9ee0b3.zip
gcc-9067a1545085e360c8eb1c95a1b1a4480d9ee0b3.tar.gz
gcc-9067a1545085e360c8eb1c95a1b1a4480d9ee0b3.tar.bz2
gcov: fix reading of zero sections.
I noticed that during coverage build of binutils. gcc/ChangeLog: * gcov.c (read_count_file): Never call gcov_sync with a negative value.
Diffstat (limited to 'gcc/gcov.c')
-rw-r--r--gcc/gcov.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gcc/gcov.c b/gcc/gcov.c
index b302e21..36938bd 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -1940,6 +1940,7 @@ read_count_file (void)
while ((tag = gcov_read_unsigned ()))
{
unsigned length = gcov_read_unsigned ();
+ int read_length = (int)length;
unsigned long base = gcov_position ();
if (tag == GCOV_TAG_OBJECT_SUMMARY)
@@ -1972,7 +1973,6 @@ read_count_file (void)
}
else if (tag == GCOV_TAG_FOR_COUNTER (GCOV_COUNTER_ARCS) && fn)
{
- int read_length = (int)length;
length = abs (read_length);
if (length != GCOV_TAG_COUNTER_LENGTH (fn->counts.size ()))
goto mismatch;
@@ -1980,10 +1980,10 @@ read_count_file (void)
if (read_length > 0)
for (ix = 0; ix != fn->counts.size (); ix++)
fn->counts[ix] += gcov_read_counter ();
- else
- length = 0;
}
- gcov_sync (base, length);
+ if (read_length < 0)
+ read_length = 0;
+ gcov_sync (base, read_length);
if ((error = gcov_is_error ()))
{
fnotice (stderr,