On 10/22/2014 2:31 AM, Shammah Chancellor wrote:
A couple of us working on SDC are trying to get ValueRange propigation
implemented. I was wonder if someone could offer some insight as to how VRP
works in DMD. If for example, trying to get the value range of a global, what
is the expected behavior?
It seems as though VRP is a language feature, and not a compiler feature --
since this allows some code to compile and not others. Is there a
specification for how it should work somewhere? If not, it's hard to implement
other compilers that will not generate errors in the same circumstances as DMD.
VRP is definitely a language feature, not a compiler feature. The specification
is straightforward - a narrowing conversion can be implicitly performed if it
can be proved that it would not lose information.
How it works, though, is kinda tricky, and the only guide to it is the compiler
source code.