You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A low-priority enhancement request.
For this code:
void main() {
ubyte x;
ubyte y = x << 1;
}
The range analysis determines that it's conceivable to the result of that expression to not fit in y, so the D compiler 2.064alpha gives:
temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) of type int to ubyte
To help the programmer understand faster the mistake in his/her code when expressions become more complex I think it's also useful to print the range resulting from the analysis, like:
temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) in interval [0 ... 510] of type int to ubyte
It uses 3 dots because it's an interval that includes the right end. Otherwise if you print an interval open on the right in a case like this you have to print a ulong.max+1 value:
void main() {
ulong x;
int y = x;
}
One downside: those error messages become a little longer (and a bit more noisy).
The text was updated successfully, but these errors were encountered:
> temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) in> interval [0 ... 510] of type int to ubyte
Jonathan M Davis suggests to use a more mathematical syntax to denote an interval closed on the right, like:
temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) in interval [0, 510] of type int to ubyte
bearophile_hugs reported this on 2013-06-23T13:11:24Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=10455
Description
A low-priority enhancement request. For this code: void main() { ubyte x; ubyte y = x << 1; } The range analysis determines that it's conceivable to the result of that expression to not fit in y, so the D compiler 2.064alpha gives: temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) of type int to ubyte To help the programmer understand faster the mistake in his/her code when expressions become more complex I think it's also useful to print the range resulting from the analysis, like: temp.d(3): Error: cannot implicitly convert expression (cast(int)x << 1) in interval [0 ... 510] of type int to ubyte It uses 3 dots because it's an interval that includes the right end. Otherwise if you print an interval open on the right in a case like this you have to print a ulong.max+1 value: void main() { ulong x; int y = x; } One downside: those error messages become a little longer (and a bit more noisy).The text was updated successfully, but these errors were encountered: