[Issue 13687] New: Virtual call in the interface's precondition is dispatched to the wrong vtbl entry
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Nov 4 14:40:35 PST 2014
https://issues.dlang.org/show_bug.cgi?id=13687
Issue ID: 13687
Summary: Virtual call in the interface's precondition is
dispatched to the wrong vtbl entry
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: major
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: acehreli at yahoo.com
If an interface makes a virtual function call in its precondition block then
the call gets dispatched to the wrong vtbl entry. (Probably to toHash() in the
following program).
For the bug to occur, the derived class must have a precondition block as well.
Also see the following discussion:
http://forum.dlang.org/thread/m3bbbb$lgi$1@digitalmars.
import std.stdio;
interface I
{
void foo()
in
{
int result = virtualCall();
writeln(result);
}
int virtualCall();
}
class C : I
{
void foo()
in
{}
body
{}
int virtualCall()
{
return 42;
}
}
void main()
{
new C().foo();
}
The output of the program is not the expected 42 from virtualCall():
-226009216
Ali
--
More information about the Digitalmars-d-bugs
mailing list