On Saturday, 24 October 2015 at 17:25:23 UTC, tsbockman wrote:
While improving the DMD front-end's constant folding: https://github.com/D-Programming-Language/dmd/pull/5229 I found out about DMD issue 14835: https://issues.dlang.org/show_bug.cgi?id=14835Briefly: /////////////////////////////// module main; import std.stdio; void reachIf(bool x)() { if(!x) return; writeln("reached"); // Warning: statement is not reachable } void main(string[] args) { reachIf!true(); // prints "reached" reachIf!false(); // triggers warning } /////////////////////////////// This is, I think, a big problem.
It is. This is the optimizer leaking into semantic. As far as language definition is concerned, this is a runtime if and changing it to a compile time one is an optimization.
If this was a static if, then generating a error is reasonable, but with a regular if, it isn't.
