http://d.puremagic.com/issues/show_bug.cgi?id=3722

           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
        AssignedTo: nob...@puremagic.com
        ReportedBy: k...@kmonos.net


--- Comment #0 from Kazuhiro Inaba <k...@kmonos.net> 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;
   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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------

Reply via email to