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);