https://issues.dlang.org/show_bug.cgi?id=18946
Issue ID: 18946
Summary: assert message can throw hijacking the assert failure.
Product: D
Version: D2
Hardware: x86
OS: Mac OS X
Status: NEW
Severity: enhancement
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
from https://forum.dlang.org/thread/[email protected]
import std.stdio;
import core.exception;
// mess with the compiler's reasoning about the truthiness
// of the assert, otherwise the trailing catches are removed
// as dead code, triggering the implicit one around Dmain
bool returnsFalse() { return false;}
void main() {
try {
static string throwingFunc() {
throw new Exception("An exception");
}
assert(returnsFalse(), throwingFunc());
} catch(Exception ex) {
writeln("Exception");
} catch(AssertError ex) {
writeln("Assert");
}
}
prints
Exception
the compiler should be at least warn that the message expression is not
nothrow. but we should probably deprecate it.
--