http://d.puremagic.com/issues/show_bug.cgi?id=4484
Summary: Warning for unreachable code in scope statements is too confusing Product: D Version: D2 Platform: Other OS/Version: Linux Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: jmdavisp...@gmail.com --- Comment #0 from Jonathan M Davis <jmdavisp...@gmail.com> 2010-07-18 19:53:09 PDT --- Right now, if you compile the following code with -w (it compiles fine without -w) import std.stdio; void someFuncWhichCanThrow(int val) { throw new Exception("aaaaaaaa"); } void main(string[] args) { foreach(arg; args) { scope(failure) continue; writeln(arg); } } you get the error Warning: statement is not reachable This will be highly confusing to many programmers. It _is_ technically correct (there _is_ an unreachable statement), but not clear enough. It doesn't even give a line number! If I understand correctly, what's happening is that the foreach loop becomes this foreach(arg; args) { try { writeln(arg); } catch(Exception e) { continue; throw e; } } The throw statement is then unreachable (which is a warning and thus an error with -w). However, since it's not in the programmer's code, the error gives no line number. The statement which is unreachable isn't even in their code! A better error is needed for this. Putting a statement in a scope statement which will result in unreachable code should be a warning - if not an error - but it needs to clearly indicate that the programmer is messing up with the scope statement, not give a generic message about there being an unreachable statement. Actually, thinking about this a bit more, maybe scope(failure) continue; shouldn't be disallowed, since you may very well want to eat the exception and continue. However, if that's the case, then -w shouldn't complain about unreachable statements like it currently does with scope(failure) continue; So, either the warning needs to be fixed so that it's properly clear, or the code generated by scope(failure) flow-control-statement-of-some-kind; needs to be fixed so that it doesn't have the throw in it anymore. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------