www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10910] New: Duplicate error messages for array bounds errors

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10910

           Summary: Duplicate error messages for array bounds errors
           Product: D
           Version: D1 & D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: clugdbug yahoo.com.au


--- Comment #0 from Don <clugdbug yahoo.com.au> 2013-08-27 00:05:32 PDT ---
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]

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 27 2013
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=10910



--- Comment #1 from Don <clugdbug yahoo.com.au> 2013-08-27 11:52:20 PDT ---
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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 27 2013