Hi.

The assert in stream_out_histogram_value is wrong about single value
counters where we can have a negative number as a target of an indirect
call. And likewise we use special value -1 for counters that overflow.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2019-06-11  Martin Liska  <mli...@suse.cz>

        * value-prof.c (stream_out_histogram_value): Only first value
        can't be negative.
---
 gcc/value-prof.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 57ef9e441fb..7289a698b71 100644
--- a/gcc/value-prof.c
+++ b/gcc/value-prof.c
@@ -331,7 +331,7 @@ stream_out_histogram_value (struct output_block *ob, histogram_value hist)
       /* When user uses an unsigned type with a big value, constant converted
 	 to gcov_type (a signed type) can be negative.  */
       gcov_type value = hist->hvalue.counters[i];
-      if (hist->type == HIST_TYPE_SINGLE_VALUE && (i > 0 && ((i - 1) % 2) == 0))
+      if (hist->type == HIST_TYPE_SINGLE_VALUE && i > 0)
 	;
       else
 	gcc_assert (value >= 0);

Reply via email to