segfault in invariant { assert(super); }
SimonN via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Dec 19 20:01:43 PST 2015
Hi,
the following code compiles fine, then segfaults upon running.
class Base {
this(int) { }
}
class Derived : Base {
this(int a) { super(a); }
invariant() { assert (super); }
}
void main()
{
new Derived(5);
}
Tested both with dmd 2.069.2 on Linux 64-bit, and on dpaste's dmd
2.069.1:
http://dpaste.dzfl.pl/4b9475c668f1
Backtrace on my home machine:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004246a5 in _D9invariant12_d_invariantFC6ObjectZv ()
(gdb) bt
#0 0x00000000004246a5 in
_D9invariant12_d_invariantFC6ObjectZv ()
#1 0x0000000000647bf0 in _D3app7Derived6__initZ ()
#2 0x00007fffff7ff030 in ?? ()
#3 0x000000000042301f in _D3app7Derived12__invariant1MxFZv
(this=0x0)
at source/app.d:7
Backtrace stopped: previous frame inner to this frame
(corrupt stack?)
So, looks like endless recursion inside the invairant.
Questions:
1) Is this recursion expected?
2) The example is a dustmite'd version of this: I have a public
final method Base.f(), and the compiler won't let me call f() in
Derived's invariant. This is understandable, because f() is also
a public method of Derived. However, I can call super.f()
explicitly in Derived's invariant, with no compiler error. Is
that expected to work, or should it lead to a similar segfault?
(I get the segfault.)
-- Simon
More information about the Digitalmars-d-learn
mailing list