www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17112] New: Simple writeln call produces cryptic error message


          Issue ID: 17112
           Summary: Simple writeln call produces cryptic error message
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: naclypi gmail.com

some working example code:
$ dmd --version
DMD64 D Compiler v2.072.2
Copyright (c) 1999-2016 by Digital Mars written by Walter Bright
$ dmd degenerate.d
Undefined symbols for architecture x86_64:
  "_D3std6format18__T10FormatSpecTaZ10FormatSpec6fillUpMFNaZv", referenced
in degenerate.o
in degenerate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Error: linker exited with status 1
import std.stdio;

void main(){
    writeln(["string1", "string2"]);

a more realistic example which causes the same error:
import std.stdio;     // for writeln
import std.algorithm; // for map
import std.conv;      // for to!string
import std.range;     // for iota

string[] substrings(string n) {
    // returns a "sliding window" array of substrings of n
    return iota(1,8).map!(i => n[i..(i+3)]).array;

void main(){
    int[] n = [0,1,2,3,4,5,6,7,8,9];
    writeln(n.map!(to!string).join.substrings); // <------------ this line
causes the error
    writeln(n.map!(to!string).join.substrings.join(",")); // <-- this would be
the fix
i think this is a regression because this error was not happening before i
updated dmd to v2.072.2.

Jan 21 2017