www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20114] New: -checkaction=context evaluates operand second

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

          Issue ID: 20114
           Summary: -checkaction=context evaluates operand second time on
                    assertion failure
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: dkorpel live.nl

```
int fun() {
    static int i = 100;
    assert(i++ == 100);
    return 3;
}

void main() {
    assert(fun() == 4);
}
```

Expectation: an assertion failure 3 != 4
Actual output: assertion failure 102 != 100 on line 3

The reason is that fun() is called a second time.
Then it finds 101 != 100 so another assertion failure happens before 3 != 4 can
be printed. There, again, i++ is evaluated a second time so it says 102 != 100
instead of 101 != 100.

--
Aug 07 2019