Remove wrong assert about gcov_type (PR lto/79587).
2017-02-22 Martin Liska <mliska@suse.cz> PR lto/79587 * data-streamer-in.c (streamer_read_gcov_count): Remove assert. * data-streamer-out.c (streamer_write_gcov_count_stream): Likewise. * value-prof.c (stream_out_histogram_value): Make assert more precise based on type of counter. 2017-02-22 Martin Liska <mliska@suse.cz> PR lto/79587 * gcc.dg/tree-prof/pr79587.c: New test. From-SVN: r245647
This commit is contained in:
parent
bac4371a6a
commit
8f4f841a3e
@ -1,3 +1,12 @@
|
||||
2017-02-22 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR lto/79587
|
||||
* data-streamer-in.c (streamer_read_gcov_count): Remove assert.
|
||||
* data-streamer-out.c (streamer_write_gcov_count_stream):
|
||||
Likewise.
|
||||
* value-prof.c (stream_out_histogram_value): Make assert more
|
||||
precise based on type of counter.
|
||||
|
||||
2017-02-21 Jeff Law <law@redhat.com>
|
||||
|
||||
PR tree-optimization/79621
|
||||
|
@ -181,7 +181,6 @@ gcov_type
|
||||
streamer_read_gcov_count (struct lto_input_block *ib)
|
||||
{
|
||||
gcov_type ret = streamer_read_hwi (ib);
|
||||
gcc_assert (ret >= 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -340,7 +340,6 @@ streamer_write_hwi_stream (struct lto_output_stream *obs, HOST_WIDE_INT work)
|
||||
void
|
||||
streamer_write_gcov_count_stream (struct lto_output_stream *obs, gcov_type work)
|
||||
{
|
||||
gcc_assert (work >= 0);
|
||||
gcc_assert ((HOST_WIDE_INT) work == work);
|
||||
streamer_write_hwi_stream (obs, work);
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-02-22 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR lto/79587
|
||||
* gcc.dg/tree-prof/pr79587.c: New test.
|
||||
|
||||
2017-02-21 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/79535
|
||||
|
26
gcc/testsuite/gcc.dg/tree-prof/pr79587.c
Normal file
26
gcc/testsuite/gcc.dg/tree-prof/pr79587.c
Normal file
@ -0,0 +1,26 @@
|
||||
/* { dg-require-effective-target lto } */
|
||||
/* { dg-options "-O2 -flto" } */
|
||||
|
||||
unsigned long global = -12345;
|
||||
|
||||
unsigned long
|
||||
__attribute__((noinline))
|
||||
test(unsigned long v, unsigned long v2)
|
||||
{
|
||||
unsigned long x = v % v2;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
unsigned long r = 0;
|
||||
|
||||
for (int i = 0; i < 100; i++)
|
||||
r += test(argc, global);
|
||||
|
||||
if (r != 100)
|
||||
__builtin_abort ();
|
||||
|
||||
return 0;
|
||||
}
|
@ -365,7 +365,17 @@ stream_out_histogram_value (struct output_block *ob, histogram_value hist)
|
||||
break;
|
||||
}
|
||||
for (i = 0; i < hist->n_counters; i++)
|
||||
streamer_write_gcov_count (ob, hist->hvalue.counters[i]);
|
||||
{
|
||||
/* 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)
|
||||
;
|
||||
else
|
||||
gcc_assert (value >= 0);
|
||||
|
||||
streamer_write_gcov_count (ob, value);
|
||||
}
|
||||
if (hist->hvalue.next)
|
||||
stream_out_histogram_value (ob, hist->hvalue.next);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user