[Issue 19317] New: dip1008 doesn't call the throwable's destructor in _d_delThrowable
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Oct 19 23:38:45 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=19317
Issue ID: 19317
Summary: dip1008 doesn't call the throwable's destructor in
_d_delThrowable
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: major
Priority: P1
Component: druntime
Assignee: nobody at puremagic.com
Reporter: atila.neves at gmail.com
The last assertion in the code below fails. This makes 1008 far less useful
than it could be. Exceptions have error messages, and the only way to construct
a useful message with runtime information is to allocate. Given that the
purpose of dip1008 is to avoid the GC and still be able to use exceptions, the
non error-prone way of doing this is to use an RAII string class.
However, that means that _d_delThrowable should call the class's destructor,
which it doesn't right now, resulting in a either a leak or the programmer
having to manually dispose of the memory.
---------------
class MyException: Exception {
static int numInstances;
this(string msg) {
super(msg);
++numInstances;
}
~this() {
--numInstances;
}
}
void main() {
assert(MyException.numInstances == 0);
try
throw new MyException("oops");
catch(MyException _)
assert(MyException.numInstances == 1);
assert(MyException.numInstances == 0);
}
---------------
% dmd -dip1008 -run exception.d
core.exception.AssertError at exception.d(21): Assertion failure
--
More information about the Digitalmars-d-bugs
mailing list