This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make MEM_WRAP_CHECK more compile-time
authorDavid Mitchell <davem@iabyn.com>
Thu, 26 Feb 2015 18:42:16 +0000 (18:42 +0000)
committerDavid Mitchell <davem@iabyn.com>
Tue, 3 Mar 2015 21:36:15 +0000 (21:36 +0000)
commite6bdf523c482703fe07cfe70c76a0efbd6971301
tree5e9311620852b8be8e90ae9c78107f69cd71bf06
parentc47e32e38f12c56c3098cb7845b451787467f03c
Make MEM_WRAP_CHECK more compile-time

MEM_WRAP_CHECK(n,t) checks whether n * sizeof(t) exceeds the
memory size, and so is likely to wrap.

When the type of n is small (e.g. a U8), you used to get compiler warnings
about a comparison always being true. This was avoided by adding 0.0. Now
Coverity complains that you're doing a floating-point comparison with the
results of an integer division.

Instead of adding 0.0, instead add some more compile-time checks
that will cause the runtime check to be skipped when the maximum value
of n (as determined by sizeof(n)) is a lot less than memory size.

On my 64-bit system this also pleasingly makes the executable 8384 bytes
smaller, implying that in many cases, the run-time check is now being
skipped.
handy.h