www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 3550] New: array.dup violates const/invariant without a cast.

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

           Summary: array.dup violates const/invariant without a cast.
           Product: D
           Version: 2.036
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: schveiguy yahoo.com



19:47:31 PST ---
simple test case:

import std.stdio;

class C { int x; }

void foo(const(C)[] arg)
{
  auto arg2 = arg.dup;
  foreach(c; arg2) c.x = 5;
}

void main()
{
  C[] arr;
  arr ~= new C;
  foo(arr);
  writefln("%d", arr[0].x);
}

This compiles and outputs 5.

I believe dup should statically fail if the element type has any references in
it and the type is const or invariant.

Likewise, I think idup should fail if the element type has any references in
it.  These properties are not supposed to be "you're on your own" territory
IMO.

This is related to bug 1339

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 24 2009
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3550




20:02:10 PST ---
I should clarify:

I think idup should fail if the element has any *non-immutable* references in
it.

Note this leaves us with no ways to dup a const array with references in it! 
Should we have cdup?  A workaround to both would be to always allow dup when an
explicit cast is involved.

i.e.:

auto arg2 = cast(const(C)[])arg.dup;

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 24 2009
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3550


Sobirari Muhomori <dfj1esp02 sneakemail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|                            |2573



13:25:17 PDT ---
Just thought, there must be this bug...

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


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
                 CC|                            |yebblies gmail.com



https://github.com/D-Programming-Language/dmd/pull/219

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 08 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=3550


Walter Bright <bugzilla digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla digitalmars.com
         Resolution|                            |FIXED



22:33:46 PDT ---
https://github.com/D-Programming-Language/dmd/commit/f6fe4cc94d3210e260905ddf4c56a332c3d4f961

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