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
The problem is in implicitConvTo() and implicitCastTo(). They call optimize(), but don't save the result.
optimize() can generate an error message, and return an ErrorExp when an array bounds error occurs.
It should be called BEFORE implicitConvTo, instead of inside it.
There are many cases of this, here are some examples:
void example()
{
char c = "abcdef"[17];
char[7] x = "abc"[12];
int ww = "abc"["afds"[9]];
}
diag.d(4): Error: string index 17 is out of bounds [0 .. 6]
diag.d(4): Error: string index 17 is out of bounds [0 .. 6]
diag.d(5): Error: string index 12 is out of bounds [0 .. 3]
diag.d(5): Error: string index 12 is out of bounds [0 .. 3]
diag.d(5): Error: string index 12 is out of bounds [0 .. 3]
diag.d(5): Error: string index 12 is out of bounds [0 .. 3]
diag.d(6): Error: string index 9 is out of bounds [0 .. 4]
diag.d(6): Error: string index 9 is out of bounds [0 .. 4]
The text was updated successfully, but these errors were encountered:
A couple more examples:
void bug10910(string y) {}
char example()
{
char c = "abcdef"[17];
char [7] x = "abc"[12];
int ww = "abc"["dsdffg"[9]];
int m = new int["as"[218]];
auto aa = [0:0];
aa.remove("dgffs"[356]);
bug10910("sdgdf"[14..16]);
return c;
}
The last line gives a particularly silly error message:
junk.d(80): Error: string slice [14 .. 16] is out of bounds
junk.d(80): Error: function junk.bug10910 (string y) is not callable using argument types (string)
Converting string to string is not exactly rocket science.
Don reported this on 2013-08-27T00:05:32Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=10910
CC List
Description
The problem is in implicitConvTo() and implicitCastTo(). They call optimize(), but don't save the result. optimize() can generate an error message, and return an ErrorExp when an array bounds error occurs. It should be called BEFORE implicitConvTo, instead of inside it. There are many cases of this, here are some examples: void example() { char c = "abcdef"[17]; char[7] x = "abc"[12]; int ww = "abc"["afds"[9]]; } diag.d(4): Error: string index 17 is out of bounds [0 .. 6] diag.d(4): Error: string index 17 is out of bounds [0 .. 6] diag.d(5): Error: string index 12 is out of bounds [0 .. 3] diag.d(5): Error: string index 12 is out of bounds [0 .. 3] diag.d(5): Error: string index 12 is out of bounds [0 .. 3] diag.d(5): Error: string index 12 is out of bounds [0 .. 3] diag.d(6): Error: string index 9 is out of bounds [0 .. 4] diag.d(6): Error: string index 9 is out of bounds [0 .. 4]The text was updated successfully, but these errors were encountered: