On Tuesday, 27 October 2015 at 19:30:08 UTC, Timon Gehr wrote:
On 10/27/2015 06:35 PM, Steven Schveighoffer wrote:
I understand how the compiler treats it. In some cases, the
statement
is reachable, the compiler is unhelpfully pointing out cases
where it
was unreachable.
The reachable statement is not the same as the statement that
is flagged unreachable. This is not an implementation detail
and it is not 'incorrect'. It might be changed if the consensus
is that it is unhelpful. Personally, I usually avoid generating
dead code.
I don't think any dead code is being generated, in the cases
where the compiler knows enough to issue the "statement is not
reachable" warning. My testing indicates that when the compiler
decides code is unreachable, it just removes it.
(I found this out because of a bug in the compiler:
http://forum.dlang.org/thread/[email protected])
Any fix for issue 14835 should still allow the compiler to detect
and remove dead code in template instantiations - but in cases
where the code could be reached with a different set of template
parameters, it should be removed silently, without the warning.
This would make it consistent with the behaviour of inlining, as
Steven Schveighoffer pointed out.