Thread overview
[Issue 10859] New: Problem with array() of a map Range of simple tuples
Aug 20, 2013
Maxim Fomin
Sep 30, 2013
Denis Shelomovskij
August 20, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859

           Summary: Problem with array() of a map Range of simple tuples
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody@puremagic.com
        ReportedBy: bearophile_hugs@eml.cc


--- Comment #0 from bearophile_hugs@eml.cc 2013-08-20 07:31:25 PDT ---
I don't know if this is a regression. Here "words.txt" is just a file of words separated by a newline:


import std.stdio: File;
import std.algorithm: map;
import std.typecons: tuple;
import std.array: array;
void main() {
    File("words.txt")
    .byLine
    .map!(line => tuple(line))
    .array
    ;
}


If I compile with -g it gives at run-time, dmd 2.064alpha:


core.exception.AssertError@std.algorithm(1927): Assertion failure
----------------
0x00424903 in onAssertError
0x0040ED86 in pure nothrow @safe void
std.typecons.Tuple!(char[]).Tuple.opAssign!(std.typecons.Tuple!(char[]).Tuple).opAssign(std.typecons.Tuple!(char[]).Tuple)
at ...\dmd2\src\phobos\std\typecons.d(525)
0x0040F5A4 in pure nothrow @safe void
std.array.Appender!(std.typecons.Tuple!(char[]).Tuple[]).Appender.put!(std.typecons.Tuple!(char[]).Tuple).put(std.typecons.Tuple!(char[]).Tuple)
at ...\dmd2\src\phobos\std\array.d(2347)
0x0040EE72 in
D3std5array116__T5arrayTS6test5b4main80__T9MapResultS226test5b4main9__lambda2TS3std5stdio4File1F8E0F5CC6B0162C488BCADE9A33A8B01
at ...\dmd2\src\phobos\std\array.d(70)
0x00402087 in _Dmain at ...\test5b.d(7)
0x0041C580 in extern (C) int rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).void runMain()
0x0041C610 in extern (C) int rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).void runAll()
0x0041BEED in _d_run_main
0x004084D0 in main
0x00432825 in mainCRTStartup
0x7691D2E9 in BaseThreadInitThunk
0x76FB1603 in RtlInitializeExceptionChain
0x76FB15D6 in RtlInitializeExceptionChain
----------------


If inside the main I replace "array" with "writeln" the program works correctly.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 20, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859


monarchdodra@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |monarchdodra@gmail.com
           See Also|                            |http://d.puremagic.com/issu
                   |                            |es/show_bug.cgi?id=9975


--- Comment #1 from monarchdodra@gmail.com 2013-08-20 09:06:00 PDT ---
Kind of like #10690: Combination bug

Array calls appender.

appender calls opAssign on un-initilized memory (which is wrong: It should call emplace... but emplace is broken, so that wouldn't change much anyways)

In any case, once inside Tuple.opAssign, the implementation will *swap*
(correctly).

Unfortunatly, since "this" is not initialized, an assert will trigger in "swap", as the string "points" to the other object.

There are many steps involved for a "full" recovery, but I think that removing the "pointsTo" assertion in "swap" is the first step: http://d.puremagic.com/issues/show_bug.cgi?id=9975#c14 https://github.com/D-Programming-Language/phobos/pull/1390

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 20, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859


Maxim Fomin <maxim@maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |maxim@maxim-fomin.ru


--- Comment #2 from Maxim Fomin <maxim@maxim-fomin.ru> 2013-08-20 11:41:13 PDT ---
It seems that http://d.puremagic.com/issues/show_bug.cgi?id=10136 is probably related to this issue.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 20, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859



--- Comment #3 from bearophile_hugs@eml.cc 2013-08-20 12:57:34 PDT ---
(In reply to comment #2)
> It seems that http://d.puremagic.com/issues/show_bug.cgi?id=10136 is probably related to this issue.

It seems Issue 10136 is a worksforme.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 28, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859



--- Comment #4 from monarchdodra@gmail.com 2013-08-28 02:06:04 PDT ---
(In reply to comment #1)
> Kind of like #10690: Combination bug
> 
> Array calls appender.
> 
> appender calls opAssign on un-initilized memory (which is wrong: It should call emplace... but emplace is broken, so that wouldn't change much anyways)
> 
> In any case, once inside Tuple.opAssign, the implementation will *swap*
> (correctly).
> 
> Unfortunatly, since "this" is not initialized, an assert will trigger in "swap", as the string "points" to the other object.
> 
> There are many steps involved for a "full" recovery, but I think that removing the "pointsTo" assertion in "swap" is the first step: http://d.puremagic.com/issues/show_bug.cgi?id=9975#c14 https://github.com/D-Programming-Language/phobos/pull/1390

Still same symptoms as 10690: Not fixed because appender calls opAssign.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 28, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859



--- Comment #5 from monarchdodra@gmail.com 2013-08-28 04:29:56 PDT ---
(In reply to comment #4)
> (In reply to comment #1)
> > Kind of like #10690: Combination bug
> > 
> > Array calls appender.
> > 
> > appender calls opAssign on un-initilized memory (which is wrong: It should call emplace... but emplace is broken, so that wouldn't change much anyways)
> > 
> > In any case, once inside Tuple.opAssign, the implementation will *swap*
> > (correctly).
> > 
> > Unfortunatly, since "this" is not initialized, an assert will trigger in "swap", as the string "points" to the other object.
> > 
> > There are many steps involved for a "full" recovery, but I think that removing the "pointsTo" assertion in "swap" is the first step: http://d.puremagic.com/issues/show_bug.cgi?id=9975#c14 https://github.com/D-Programming-Language/phobos/pull/1390
> 
> Still same symptoms as 10690: Not fixed because appender calls opAssign.

https://github.com/D-Programming-Language/phobos/pull/1529

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
September 30, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10859


Denis Shelomovskij <verylonglogin.reg@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |verylonglogin.reg@gmail.com
         Resolution|                            |DUPLICATE


--- Comment #6 from Denis Shelomovskij <verylonglogin.reg@gmail.com> 2013-09-30 18:19:59 MSD ---
This is a clear dup caused by same appender issue (onAssign call on garbage).

*** This issue has been marked as a duplicate of issue 10690 ***

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