D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.

Issue 3722

Summary: A method without an in contract should always succeed, even if overridden
Product: D Reporter: Kazuhiro Inaba <kiki>
Component: dmdAssignee: No Owner <nobody>
Status: RESOLVED FIXED
Severity: normal CC: bugzilla, yebblies
Priority: P2 Keywords: patch, wrong-code
Version: D2
Hardware: All
OS: All

Description Kazuhiro Inaba 2010年01月19日 01:25:04 UTC
In dmd 2.039, the following code fails to pass the in-contract.
class Base
{
 void method() {}
}
class Derived : Base
{
 void method() in { assert(false); } body {}
}
void main()
{
 Base b = new Derived;
 b.method();
}
But, according to the spec, IIUC, it should successfully pass the check.
> A function without an in contract means that any values of the function parameters are allowed. This implies that if any function in an inheritance hierarchy has no in contract, then in contracts on functions overriding it have no useful effect.
If I add an explicit empty in-contract to Base.method:
 void method() in{} body{}
then it passes the check.
Comment 1 yebblies 2011年07月02日 11:43:03 UTC
https://github.com/D-Programming-Language/dmd/pull/192 

AltStyle によって変換されたページ (->オリジナル) /