aboutsummaryrefslogtreecommitdiffstats
path: root/bootstrap/lib
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2012-08-22 14:54:45 +0200
committerBjörn Gustavsson <[email protected]>2012-08-22 16:16:26 +0200
commite4e5d08621137473674cf3cdce0b36a43a8d6d15 (patch)
treebe27bd18de935d599efa2b48363d9df6d0edc766 /bootstrap/lib
parent064b42237d891d5fdcb6c1a351980b8291437618 (diff)
downloadotp-e4e5d08621137473674cf3cdce0b36a43a8d6d15.tar.gz
otp-e4e5d08621137473674cf3cdce0b36a43a8d6d15.tar.bz2
otp-e4e5d08621137473674cf3cdce0b36a43a8d6d15.zip
compiler: Warn if the size of a binary segment is invalid
The compiler would silently accept and Dialyzer would crash on code like: <<X:(2.5)>> It is never acceptable for Dialyzer to crash. The compiler should at least generate a warning for such code. It is tempting to let the compiler generate an error, but that would mean that code like: Sz = 42.0, <<X:Sz>>. would be possible to compile with optimizations disabled, but not with optimizations enabled. Dialyzer crashes because it calls cerl:bitstr_bitsize/1, which crashes if the type of size for the segment is invalid. The easiest way to avoid that crash is to extend the sanity checks in v3_core to also include the size field of binary segments. That will cause the compiler to issue a warning and to replace the bad binary construction with a call to erlang:error/1. (It also means that Dialyzer will not issue a warning for bad size fields.)
Diffstat (limited to 'bootstrap/lib')
0 files changed, 0 insertions, 0 deletions