Use actual ValueTypes when computing value ranges.
Fixes #17664 (closed).
We currently truncate to double precision, which gives incorrect results on 64-bit integers.
We need to enable /bigobj
on MSVC to support the larger symbol tables
needed to handle the template codegen.
This does not cache the ranges like GetRange does, since we do not have the infrastructure to do so (we don't have information keys for large integers). I will open a bug for these issues.