www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7337] New: subclasses without invariants don't check basisclass invariant after method

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7337

           Summary: subclasses without invariants don't check basisclass
                    invariant after method
           Product: D
           Version: D2
          Platform: x86_64
        OS/Version: Linux
            Status: NEW
          Severity: critical
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: devbai mnet-mail.de



Hello,

Subclasses without own invariants don't check basisclass invariant
after method.

example:


the programm ..
**************
import std.stdio;

/** Basisclass with own invariants */
class ClassA 
{
  private int mValue=0;

  invariant()
  { writeln("checking INVARIANT ClassA");
    assert ( mValue>=0 );              
  }

  public void doSomthing()
  { writeln("ClassA.doSomthing() - BODY");
  }   
}


/** Subclass with own invariants */
class ClassB : ClassA
{
  invariant()
  { writeln("checking INVARIANT ClassB");
  }

  override
  public void doSomthing()
  { writeln("ClassB.doSomthing() - BODY");
  }   
}

/** Subclass without own invariants */
class ClassC : ClassA
{
  override
  public void doSomthing()
  { writeln("ClassC.doSomthing() - BODY");
  }   
}




public static void main ()
{
  writeln("***  START  ***");

  writeln("\nClassA:");
  ClassA aObject = new ClassA();
  aObject.doSomthing();

  writeln("\nClassB:");
  ClassB bObject = new ClassB();
  bObject.doSomthing();

  writeln("\nClassC:");
  ClassC cObject = new ClassC();
  cObject.doSomthing();

  writeln("\n***  END  ***");
}
**************

compiled with DMD64 D Compiler v2.057


will output:
**************
***  START  ***

ClassA:
checking INVARIANT ClassA
ClassA.doSomthing() - BODY
checking INVARIANT ClassA

ClassB:
checking INVARIANT ClassB
checking INVARIANT ClassA
ClassB.doSomthing() - BODY
checking INVARIANT ClassB
checking INVARIANT ClassA

ClassC:
checking INVARIANT ClassA
ClassC.doSomthing() - BODY

***  END  ***
**************

as seen classC-method doSomething() dont check invariant after methode-call.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 21 2012
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7337


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
                 CC|                            |yebblies gmail.com
           Platform|x86_64                      |All
         OS/Version|Linux                       |All



This is currently disabled in FuncDeclaration::addPostInvariant, and enabling
it causes a lot of error bugs in druntime and phobos, presumably due to issue
5039.  Once that bug is closed this will hopefully be a quick fix.

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