Commit e6c109f
Fix BlockNeedsWrap / ExpressionBodyNeedsWrap to only skip on the fixer's own output shape
Previously BlockNeedsWrap used body.DescendantNodes() to look for an existing
'unsafe' block anywhere in the body, which incorrectly suppressed wrapping when:
- the outer body contained other top-level unsafe operations alongside a manual
'unsafe { }' block, or
- a nested local function / lambda happened to contain its own 'unsafe' block.
In either case, removing the method-level 'unsafe' modifier without wrapping the
outer body produces code that no longer compiles. Tighten the skip condition so
we only treat the body as already-wrapped when it's literally
'{ unsafe { ... } }' — the shape the fixer itself emits — preserving idempotence
without false positives.
The same descendant-scan was also in ExpressionBodyNeedsWrap, where it could
only ever match nested lambdas (since an unsafe statement can't be the body of
an arrow expression directly); simplified to always wrap when an expression body
is present.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 595e1b5 commit e6c109f
2 files changed
Lines changed: 85 additions & 5 deletions
File tree
- src/tools/illink
- src/ILLink.RoslynAnalyzer
- test/ILLink.RoslynAnalyzer.Tests
Lines changed: 14 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
185 | | - | |
186 | | - | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
187 | 188 | | |
188 | 189 | | |
189 | 190 | | |
190 | 191 | | |
191 | | - | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
192 | 198 | | |
193 | 199 | | |
194 | 200 | | |
| |||
209 | 215 | | |
210 | 216 | | |
211 | 217 | | |
212 | | - | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
213 | 222 | | |
214 | | - | |
| 223 | + | |
215 | 224 | | |
216 | 225 | | |
217 | 226 | | |
| |||
Lines changed: 71 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
352 | 352 | | |
353 | 353 | | |
354 | 354 | | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
355 | 426 | | |
356 | 427 | | |
357 | 428 | | |
| |||
0 commit comments