www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 19537] New: Invariants from base classes not called

https://issues.dlang.org/show_bug.cgi?id=19537

          Issue ID: 19537
           Summary: Invariants from base classes not called
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: dhasenan gmail.com

From the spec ( https://dlang.org/spec/contracts.html ):
"Class invariants are inherited, that is, any class invariant is implicitly in addition to the invariants of its base classes." Consider the following code: --- import core.exception; class A { int i = 3; invariant { assert(i >= 2); } } class B : A { void setB(int v) { i = v; } invariant { assert(i <= 10); } } void main() { B b = new B; b.setB(1); } --- B should have two assertions in its invariant: 1. assert(i >= 2) 2. assert(i <= 10) The first assertion should fail; 1 is not greater than or equal to 2. However, A's invariant is not called. This can be verified by adding `writeln("A invariant");` to A's invariant. Either this is a deliberate change and the spec needs to be updated, or it's a bug and the behavior needs to be changed. --
Jan 01 2019