[Issue 14835] New: Statement is not reachable doesn't play along generic code
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sun Jul 26 10:49:06 PDT 2015
https://issues.dlang.org/show_bug.cgi?id=14835
Issue ID: 14835
Summary: Statement is not reachable doesn't play along generic
code
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: pro.mathias.lang at gmail.com
The "statement is not reachable" warning is a major annoyance when writting
generic code. It often end up being more of a disturbance than an actual help.
The reason is that it doesn't accept code that would be common at runtime.
Consider the following example:
````
bool isEven(int i)
{
if (i % 2)
return true;
return false;
}
````
In normal code, requiring `return false;` to be in an `else` branch would be a
major annoyance for no benefit. Now take the exact same code, but at CT:
````
bool isEven(int i)()
{
static if (i % 2) // static or not, the warning will get triggered if i is
even
return true;
return false;
}
````
This is a simple example, but I believe it illustrate the problem well enough.
In addition to the "put everything in a branch" problem, there are some cases
where it simply forces you to move to recursion everywhere because there's no
way to fix the warning, for example:
https://github.com/rejectedsoftware/vibe.d/blob/38784138ad8cc8f442bd0e76a1b740040ff33fe5/source/vibe/internal/meta/typetuple.d#L101-L121
This code can only be fixed in 2 ways: either move to recursion, or use a dummy
boolean parameter to confuse DMD's flow analysis (example:
https://github.com/rejectedsoftware/vibe.d/blob/38784138ad8cc8f442bd0e76a1b740040ff33fe5/source/vibe/web/rest.d#L1150-L1154
).
--
More information about the Digitalmars-d-bugs
mailing list