Commit 7303fca
[analyzer] Improve dead_code detection for
Special care has to be taken when reporting dead code for `for`
statements and `for` elements, because the "updaters" part of a
for-loop appears before the body in source, but is executed after the
body. This means that if the end of the loop body is unreachable, then
a separate dead_code range might need to be generated to cover the
updaters.
Previously, this was accomplished by special-case logic in
`NullSafetyDeadCodeVerifier.flowEnd`: if the parent of
`_firstDeadNode` was a `ForStatement` (or a `Block` inside a
`ForStatement`), extra logic would be triggered to emit a dead_code
range to cover the updaters. This mostly worked, but it didn't handle
a `Block` inside a `Block` inside a `ForStatement`, and I couldn't
figure out a good way to generalize it to handle `ForElement`s.
The new approach is for the resolver to make two additional calls into
`NullSafetyDeadCodeVerifier`, just after visiting the "condition" part
of the loop and just before visiting the updaters. Combining together
information gathered at these two times, the
`NullSafetyDeadCodeVerifier` can determine whether or not it's
necessary to emit a separate dead_code range to cover the updaters.
Pre-existing tests in `dead_code_test.dart` still pass, and I've added
a bunch of tests of the new functionality.
These improvements pave the way for improvements to the analysis
server's "remove dead code" fix, which I want to do in order to
prepare for the rollout of sound flow analysis.
Bug: #60438
Change-Id: I6d2c43fd7c06adcd4de22d42144b033319e949a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/424180
Reviewed-by: Konstantin Shcheglov <[email protected]>
Commit-Queue: Paul Berry <[email protected]>for statements/elements.1 parent 8d62a1f commit 7303fca
File tree
3 files changed
+327
-23
lines changed- pkg/analyzer
- lib/src
- dart/resolver
- error
- test/src/diagnostics
3 files changed
+327
-23
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
253 | 253 | | |
254 | 254 | | |
255 | 255 | | |
| 256 | + | |
| 257 | + | |
256 | 258 | | |
257 | 259 | | |
258 | 260 | | |
259 | 261 | | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
260 | 266 | | |
261 | 267 | | |
262 | 268 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
28 | 39 | | |
29 | 40 | | |
30 | 41 | | |
| |||
302 | 313 | | |
303 | 314 | | |
304 | 315 | | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
310 | | - | |
311 | | - | |
312 | 316 | | |
313 | 317 | | |
314 | 318 | | |
| |||
330 | 334 | | |
331 | 335 | | |
332 | 336 | | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
333 | 377 | | |
334 | 378 | | |
335 | 379 | | |
| |||
428 | 472 | | |
429 | 473 | | |
430 | 474 | | |
431 | | - | |
432 | | - | |
433 | | - | |
434 | | - | |
435 | | - | |
436 | | - | |
437 | | - | |
438 | | - | |
439 | | - | |
440 | | - | |
441 | | - | |
442 | | - | |
443 | | - | |
444 | | - | |
445 | | - | |
446 | | - | |
447 | 475 | | |
448 | 476 | | |
449 | 477 | | |
| |||
0 commit comments