[Issue 17315] New: Assigning a delegate to a function compiles but causes segfault
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Apr 10 00:33:33 PDT 2017
https://issues.dlang.org/show_bug.cgi?id=17315
Issue ID: 17315
Summary: Assigning a delegate to a function compiles but causes
segfault
Product: D
Version: D2
Hardware: All
URL: http://dlang.org/
OS: All
Status: NEW
Severity: major
Priority: P3
Component: dmd
Assignee: nobody at puremagic.com
Reporter: tomerfiliba at gmail.com
using `DMD64 D Compiler v2.073.0` on ubuntu 16.04
===========================================
class Base {
__gshared static Base function()[string] registry;
static Base load(string name) {return registry[name]();}
}
class Child: Base {
shared static this() {
import std.traits: fullyQualifiedName;
registry[fullyQualifiedName!(typeof(this))] = &_load; // <<< this
shouldn't compile
}
Base _load() {return new typeof(this);}
}
void main() {
auto inst = Base.load("dtest.Child"); // segfault
}
===========================================
Program received signal SIGSEGV, Segmentation fault.
0x0000000000453f4a in invariant._d_invariant(Object) ()
(gdb) bt
#0 0x0000000000453f4a in invariant._d_invariant(Object) ()
#1 0x0000000000440272 in dtest.Child._load() (this=0x477d7b <_TMP1+11>) at
src/dtest.d:69
#2 0x00000000004401ad in dtest.Base.load(immutable(char)[]) (name=...) at
src/dtest.d:60
#3 0x000000000044029c in D main () at src/dtest.d:81
===========================================
if i make `_load` a static function (as it should be), everything works as
expected
class Child: Base {
...
static Base _load() {return new typeof(this);}
}
--
More information about the Digitalmars-d-bugs
mailing list