Commit 6286403
Narrow the give-up condition for scoped-local-to-parameter pattern
The previous skip (any stackalloc + any parameter assignment) was too
broad. The exact CS9080-triggering shape needs three ingredients:
1. a local declared with an explicit `scoped` modifier
2. that local's value assigned to a parameter of the enclosing member
3. the local being populated from a block-scoped initializer
(typically stackalloc)
Drop any one and the wrap compiles fine. Specifically, the user's
`Span<char> escaped = stackalloc char[8]; param = escaped.Slice(...);`
shape (no `scoped` on the local) is now correctly reported and
transformed - C#'s lenient inference for non-scoped local lifetimes
keeps it compilable after wrapping.
Analyzer now skips only when the body contains a `VariableDeclarationSyntax`
whose `Type` is `ScopedTypeSyntax` AND a simple-assignment expression
whose LHS is a parameter name and whose RHS transitively references that
scoped local.
Verified: 20 tests pass (including one for each ingredient being dropped).
STJ regenerated via dotnet format and builds clean (6 files changed, down
from 8 - the two newly-touched files were previously over-skipped).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 29a17a1 commit 6286403
8 files changed
Lines changed: 476 additions & 391 deletions
File tree
- src
- libraries/System.Text.Json/src/System/Text/Json
- Document
- Reader
- Serialization/Converters/Value
- tools/illink
- src/ILLink.RoslynAnalyzer
- test/ILLink.RoslynAnalyzer.Tests
Lines changed: 153 additions & 143 deletions
Large diffs are not rendered by default.
Lines changed: 26 additions & 21 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | | - | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
251 | 255 | | |
252 | | - | |
253 | | - | |
254 | | - | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
255 | 259 | | |
256 | | - | |
| 260 | + | |
257 | 261 | | |
258 | | - | |
259 | | - | |
260 | | - | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
261 | 277 | | |
262 | 278 | | |
263 | 279 | | |
264 | 280 | | |
265 | 281 | | |
266 | 282 | | |
267 | 283 | | |
268 | | - | |
| 284 | + | |
269 | 285 | | |
270 | | - | |
271 | | - | |
272 | | - | |
273 | | - | |
274 | | - | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | | - | |
280 | | - | |
281 | 286 | | |
282 | 287 | | |
283 | 288 | | |
| |||
Lines changed: 60 additions & 45 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
179 | | - | |
| 179 | + | |
180 | 180 | | |
181 | | - | |
182 | | - | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
183 | 187 | | |
184 | | - | |
185 | | - | |
| 188 | + | |
| 189 | + | |
186 | 190 | | |
187 | | - | |
188 | | - | |
| 191 | + | |
| 192 | + | |
189 | 193 | | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
196 | 200 | | |
197 | | - | |
198 | | - | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
199 | 204 | | |
200 | 205 | | |
201 | 206 | | |
| |||
224 | 229 | | |
225 | 230 | | |
226 | 231 | | |
227 | | - | |
| 232 | + | |
228 | 233 | | |
229 | | - | |
230 | | - | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
231 | 240 | | |
232 | | - | |
233 | | - | |
| 241 | + | |
| 242 | + | |
234 | 243 | | |
235 | | - | |
236 | | - | |
| 244 | + | |
| 245 | + | |
237 | 246 | | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
243 | | - | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
244 | 253 | | |
245 | | - | |
246 | | - | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
247 | 257 | | |
248 | 258 | | |
249 | 259 | | |
| |||
273 | 283 | | |
274 | 284 | | |
275 | 285 | | |
276 | | - | |
| 286 | + | |
277 | 287 | | |
278 | | - | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
279 | 293 | | |
280 | | - | |
281 | | - | |
282 | | - | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
283 | 297 | | |
284 | | - | |
285 | | - | |
| 298 | + | |
| 299 | + | |
286 | 300 | | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
293 | 307 | | |
294 | | - | |
295 | | - | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
296 | 311 | | |
297 | 312 | | |
298 | 313 | | |
| |||
Lines changed: 73 additions & 68 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
535 | 535 | | |
536 | 536 | | |
537 | 537 | | |
538 | | - | |
| 538 | + | |
539 | 539 | | |
540 | | - | |
541 | | - | |
542 | | - | |
543 | | - | |
544 | | - | |
545 | | - | |
546 | | - | |
547 | | - | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
548 | 543 | | |
549 | | - | |
| 544 | + | |
550 | 545 | | |
551 | | - | |
552 | | - | |
553 | | - | |
554 | | - | |
555 | | - | |
556 | | - | |
557 | | - | |
558 | | - | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
559 | 552 | | |
560 | 553 | | |
| 554 | + | |
561 | 555 | | |
562 | 556 | | |
563 | 557 | | |
564 | 558 | | |
565 | 559 | | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
| 569 | + | |
566 | 570 | | |
567 | | - | |
| 571 | + | |
568 | 572 | | |
569 | | - | |
570 | | - | |
571 | | - | |
572 | | - | |
573 | | - | |
574 | | - | |
575 | | - | |
576 | | - | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
577 | 577 | | |
578 | | - | |
579 | | - | |
580 | | - | |
581 | | - | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
582 | 581 | | |
583 | | - | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
584 | 590 | | |
585 | | - | |
586 | | - | |
587 | 591 | | |
588 | | - | |
589 | | - | |
590 | | - | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
591 | 595 | | |
592 | | - | |
| 596 | + | |
593 | 597 | | |
594 | | - | |
595 | | - | |
596 | | - | |
597 | | - | |
598 | | - | |
599 | | - | |
600 | | - | |
601 | | - | |
602 | | - | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
603 | 607 | | |
604 | | - | |
605 | | - | |
606 | | - | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
607 | 611 | | |
608 | | - | |
609 | | - | |
610 | | - | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
611 | 615 | | |
612 | | - | |
613 | | - | |
| 616 | + | |
| 617 | + | |
614 | 618 | | |
615 | | - | |
616 | | - | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
617 | 622 | | |
618 | | - | |
619 | 623 | | |
620 | | - | |
621 | | - | |
622 | | - | |
623 | | - | |
624 | | - | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
625 | 635 | | |
626 | | - | |
627 | | - | |
628 | | - | |
629 | | - | |
630 | | - | |
631 | 636 | | |
632 | 637 | | |
633 | 638 | | |
| |||
0 commit comments