dmd test.d -w
warning - Error: statement is not reachable
=== test.d ===
void foo()
{
assert(0);
return 0;
}
Comment #1 by smjg — 2008-11-19T18:41:13Z
Please remember to assign keywords to bug reports. To everybody reading this: Please look through issues you've reported and check for missing keywords.
This error is also an instance of issue 952.
Comment #2 by witold.baryluk+d — 2009-11-24T16:27:27Z
It also hapens in more complicated situations. Out of curriosity I added -w to my project, and found few this "warning - Error: statment is not reachble" statments, and compilation failed. I have no idea where the problem is exactly, because this is big projects, with many templates.
What is interesting for some of this warning i have lines numbers like:
warning - corod.d(389): Error: statement is not reachable
but for most:
warning - Error: statement is not reachable
And i can't find good rule when I have line number and when i don't.
Small example:
$ dmd2 -w A.d
warning - Error: statement is not reachable
=== A.d ====
class A {
void f() {
while (true) {}
return 0;
}
}
Comment #3 by witold.baryluk+d — 2009-11-24T16:27:59Z
I forgot to add in my last Comment, that I'm using DMD 2.032
Comment #4 by clugdbug — 2010-02-01T00:02:27Z
This is because statement.c, line 3515, at the end of ReturnStatement::semantic()
sets loc to zero.
//----
if (exp && tbret->ty == Tvoid && !implicit0)
{
/* Replace:
* return exp;
* with:
* exp; return;
*/
Statement *s = new ExpStatement(loc, exp);
exp = NULL;
s = s->semantic(sc);
- loc = 0;
return new CompoundStatement(loc, s, this);
}
return this;
}