[Issue 15302] New: DMD -O optimizing out meaningful code
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Sun Nov  8 07:50:20 PST 2015
    
    
  
https://issues.dlang.org/show_bug.cgi?id=15302
          Issue ID: 15302
           Summary: DMD -O optimizing out meaningful code
           Product: D
           Version: D2
          Hardware: x86
                OS: All
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: ketmar at ketmar.no-ip.org
compiling the following code with "dmd -O" leading to failed assert. seems that
dmd optimized out "lineNumber++;", failing to see that it is used in "catch"
part.
===
class XException : Exception {
  this (string msg, size_t lineNumber, string file=__FILE__, size_t
line=__LINE__, Throwable next=null) pure nothrow @safe {
    super(msg, file, line, next);
    _lineNumber = lineNumber;
  }
  @nogc @safe size_t lineNumber() const nothrow {
        return _lineNumber;
    }
  private:
  size_t _lineNumber;
}
void foo (string[] lines) {
  size_t lineNumber = 0;
  try {
    foreach (line; lines) {
      lineNumber++;
      if (line == "Line3") throw new Exception("!");
    }
  } catch (Exception e) {
    throw new XException(e.msg, lineNumber, e.file, e.line, e.next);
  }
}
void main () {
  try {
    foo(["Line", "AnotherLine", "Line3"]);
  } catch (XException e) {
    assert(e.lineNumber == 3);
  }
}
--
    
    
More information about the Digitalmars-d-bugs
mailing list