lemire/FastPFor — pull request #9 by kruus (2013-11-22 20:44:33+00:00)
Title: remove gcc-4.8.1 warnings. fix crash in summarize (exceed vector bounds ...

...during printout)
run error in fresh trunk:
cd ..; cd build; make clean; make -j5 && ./unit && ./codecssnappy --codecs=BP32,copy,fastbinarypacking16,fastbinarypacking32,fastbinarypacking8,fastpfor,newpfor,optpfor,pfor,pfor2008,simdbinarypacking,simdfastpfor,simple8b,simplepfor,varintg8iu,vbyte,vsencoding --uniformdynamic 2>&1 | tee testAll-trunk.log
... and then OOPS...
# building summary
###################
#test 1 of 3
#wall clock (delta mis, comp mis, decomp mis, idelta mis, bits per int)
#
terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check
-------------------
reason is that some of the summarize() arrays are not filled (e.g. the delta values, iirc)
I just print out "-1" if the array bound is exceeded, and then the summary prints fine.
--------------------
Also cut down screens full of gcc-4.8.1 warnings:
type 1: remove unused variable warnings (#ifndef NDEBUG. ugly, but ought to be safe)
type 2: new compiler warnings for possibly infinite loops or hard-to-optimize loops were
adjusted to give a precalculated number of iterations, or by changed <= to < in the comparison, etc.
the only non-trivial loop limit change was in pfor.h, but it seems that unit hits that loop nontrivially
with the longest test case (need len>16M to test, I think).
type 3: uint32_t-->size_t (some more like elsewhere in trunk already)
type 4: static_cast for uint64_t to avoid loss-of-precision warnings (fix copies what's done in some other trunk files)
---------
grats on speedups -- trunk speeds now faster than my own (unmerged) variants from a year or so ago.