union/toString: crash/segfault: What's happening here?

kdevel kdevel at vogtner.de
Fri Jan 12 00:54:03 UTC 2018


crash.d
```
import std.stdio;

union U {
    float f;
    int i;
    string toString ()
    {
       string s;
       return s;
    }
}

void main ()
{
    U u;
    writeln (u);
}
```

$ dmd crash.d
$ ./crash

std.exception.ErrnoException@/.../dmd2/linux/bin64/../../src/phobos/std/stdio.d(2776):  (Bad address)
----------------
??:? @safe int std.exception.errnoEnforce!(int, 
"/.../dmd2/linux/bin64/../../src/phobos/std/stdio.d", 
2776uL).errnoEnforce(int, lazy immutable(char)[]) [0x43f20a]
??:? @safe void 
std.stdio.File.LockingTextWriter.put!(immutable(char)[]).put(immutable(char)[]) [0x4422a7]
??:? @safe void 
std.range.primitives.doPut!(std.stdio.File.LockingTextWriter, 
immutable(char)[]).doPut(ref std.stdio.File.LockingTextWriter, 
ref immutable(char)[]) [0x44224b]
??:? @safe void 
std.range.primitives.put!(std.stdio.File.LockingTextWriter, 
immutable(char)[]).put(ref std.stdio.File.LockingTextWriter, 
immutable(char)[]) [0x44222b]
??:? void 
std.format.formatObject!(std.stdio.File.LockingTextWriter, 
crash.U, char).formatObject(ref std.stdio.File.LockingTextWriter, 
ref crash.U, ref const(std.format.FormatSpec!(char).FormatSpec)) 
[0x44220a]
??:? void 
std.format.formatValue!(std.stdio.File.LockingTextWriter, 
crash.U, char).formatValue(ref std.stdio.File.LockingTextWriter, 
ref crash.U, ref const(std.format.FormatSpec!(char).FormatSpec)) 
[0x44219d]
??:? uint 
std.format.formattedWrite!(std.stdio.File.LockingTextWriter, 
char, crash.U).formattedWrite(ref 
std.stdio.File.LockingTextWriter, const(char[]), crash.U) 
[0x43e703]
??:? void std.stdio.File.write!(crash.U, char).write(crash.U, 
char) [0x43e3f5]
??:? void std.stdio.writeln!(crash.U).writeln(crash.U) [0x43e389]
??:? _Dmain [0x43e344]




More information about the Digitalmars-d-learn mailing list