www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2601] New: Extraneous cast introduced in member access

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

           Summary: Extraneous cast introduced in member access
           Product: D
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: andrei metalanguage.com


I could probably simplify this a bit more, but it's short enough:

import std.functional;

void next(T)(ref T[] a) { assert(a.length); a = a[1 .. $]; }

struct MapRange(alias funAlias, Range)
{
    Range _input;
    void next() { _input.next; }
}

template map(fun...)
{
    alias mapImpl!(fun).result map;
}

template mapImpl(alias fun)
{
    MapRange!(fun, Range) result(Range)(Range input)
    {
        return typeof(return)(input);
    }
}

unittest
{
    auto x = map!("2 * a")([1, 2, 3, 4, 5]);
    //auto y = mapImpl!(fun).result!("2 * a")([1, 2, 3, 4, 5]);
}

The code fails to compile with:

Error: cast(int[])this._input is not an lvalue

As a bonus, uncommenting the last (albeit incorrect) line in unittest crashes
dmd.


-- 
Jan 21 2009
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2601


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|ice-on-invalid-code         |rejects-valid
            Version|2.000                       |1.050



The segfault was fixed long ago.
Reduced test case also fails on D1. I'm not certain it's a bug, though.
--------
void next(ref int[] a) { a[0] = 0; }

void bug2601() {
   int[3] b;   
   next(b);
}

bug.d(5): Error: cast(int[])b is not an lvalue

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 15 2010
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2601


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |yebblies gmail.com
         Resolution|                            |FIXED



I think array literals have become dynamic since then, so the case in comment 1
works.  The case in comment 2 does not appear to be a bug, casting a static
array to a dynamic array cannot result in an lvalue.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 12 2011