diff options
Diffstat (limited to 'gcc/coverage.c')
-rw-r--r-- | gcc/coverage.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/coverage.c b/gcc/coverage.c index 1dcda43..f353c9c 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -245,7 +245,9 @@ read_counts_file (void) else if (GCOV_TAG_IS_COUNTER (tag) && fn_ident) { counts_entry **slot, *entry, elt; - unsigned n_counts = GCOV_TAG_COUNTER_NUM (length); + int read_length = (int)length; + length = read_length > 0 ? read_length : 0; + unsigned n_counts = GCOV_TAG_COUNTER_NUM (abs (read_length)); unsigned ix; elt.ident = fn_ident; @@ -274,8 +276,9 @@ read_counts_file (void) counts_hash = NULL; break; } - for (ix = 0; ix != n_counts; ix++) - entry->counts[ix] += gcov_read_counter (); + if (read_length > 0) + for (ix = 0; ix != n_counts; ix++) + entry->counts[ix] = gcov_read_counter (); } gcov_sync (offset, length); if ((is_error = gcov_is_error ())) |