This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
LTO streaming problems when LTO_tags are > 255
- From: Diego Novillo <dnovillo at google dot com>
- To: Richard Guenther <richard dot guenther at gmail dot com>, Jan Hubicka <jh at suse dot cz>, gcc at gcc dot gnu dot org
- Date: Mon, 30 May 2011 15:16:16 -0400
- Subject: LTO streaming problems when LTO_tags are > 255
The new routines lto_output_int_in_range and lto_input_int_in_range do
not seem to be working right. In the pph branch, we have an LTO_tags
enum with a range [0 - 351]. This is causing two things:
- The writer gets out of sync with the reader because, we emit
delimiters with output_zero. This writes only 1 byte, which then
confuses input_record_start, which expects to read two bytes.
- The code that deals with values outside the 0xff range is not
splitting up the word properly:
lto_output_int_in_range(...)
[ ... ]
1322 val -= min;
1323 lto_output_1_stream (obs, val & 255);
1324 if (range >= 0xff)
1325 lto_output_1_stream (obs, (val << 8) & 255);
1326 if (range >= 0xffff)
1327 lto_output_1_stream (obs, (val << 16) & 255);
1328 if (range >= 0xffffff)
1329 lto_output_1_stream (obs, (val << 24) & 255);
Those should be right shifts. Or am I misreading this code?
Thanks. Diego.