Summary: A method without an in contract should always succeed,
                    even if overridden
           Product: D
           Version: 2.039
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from Kazuhiro Inaba <> 2010-01-19 01:25:04 PST ---
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;

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.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to