www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21166] New: error message when unittesting std/array depends


          Issue ID: 21166
           Summary: error message when unittesting std/array depends on
                    -cov and -O switches
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: schveiguy yahoo.com

If you clone the current phobos master, and run the unittest specifically for
std/array by doing:

make -f posix.mak std/array.test

you will get the error:

Error: variable theArray used before set

For the return statement in the following code in std.array:

    auto ret = (()  trusted
        Unqual!U[n] theArray = void;
        return theArray;

I reduced this using dustmite and hand editing down to the following code:

auto staticArray(size_t U, R)(R input)
    import std.range;
    alias ElementType!R T;
    auto res = ()  trusted {
     T[U] theArray = void;
     return theArray;

    foreach(i, x; input)
        res[i] = x;
    return res;

 safe void main()
    auto input = [0, 1];
    auto arr = input.staticArray!2;
    assert(arr[] == input);

This code fails with:

dmd -O -cov file.d

If you remove either of those options, it compiles and runs.

If you change the static array line from input.staticArray!2 to
input.staticArray!3 (and change the input size accordingly), it compiles and

I tested all the way back to 2.060 on run.dlang.io, and it fails for every

Aug 15 2020