Bug 7240 – Possibilities of throwing Throwable should be calculated

Status
RESOLVED
Resolution
LATER
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-01-06T09:20:03Z
Last change time
2021-01-24T06:43:09Z
Assigned to
No Owner
Creator
Kenji Hara

Comments

Comment #0 by k.hara.pg — 2012-01-06T09:20:03Z
(This issue is derived from bug 7232) In following code, statement #1 throws no exception, so #2 is never reachable. But current dmd cannot detect it, bool addArticle() { scope(failure) return false; // #2 return true; // #1 } My technical note from http://d.puremagic.com/issues/show_bug.cgi?id=7232#c2 > > Maybe, the original issue by Robert Clipsham is "unreachable scope(failure) > should warn "statement is not reachable" _with line number_. > But today it is technically enhancement. Because: > > 1. Current D2 dmd does only check Exception throwing possibilities in flow > analysis. > That means Throwable is not the target of the analysis. In above code, > > scope(failure) return false; > return true; // (a) > > dmd does not consider the statement (a) throws Throwable or not. > > 2. scope(failure) catches Throwable object and rethrow it. Therefore the > scope(failure) statement is always analysed as *may be reachable*. > > From the two reasons, current dmd cannot detect that the `scope(failure) return > false;` is not reachable. I think dmd should also calculate the Throwable flow, not only the Exception flow (it is related to 'nothrow' attribute).