Commit 29a17a1
Skip methods where stackalloc would escape the new unsafe block
After wrapping a method body in a fresh `unsafe { ... }` block any
`stackalloc` inside has block-scoped safe-to-escape. Assigning that
(directly or through a local) to a parameter / out variable requires
the parameter to have a wider safe-to-escape, which fails with CS9080
/ CS9081 after the wrap. The repo-wide `SkipLocalsInit` policy means
`stackalloc` must stay inside an unsafe context, so there is no
mechanical rewrite that both removes the `unsafe` modifier and keeps
the body compiling for this shape.
The analyzer now detects this combination syntactically and does not
report on the affected declarations - they keep the `unsafe`
modifier and a human can refactor them (extract a helper that takes
the buffer, restructure the stackalloc) if desired.
Conservative check: collect parameter names of the enclosing member,
then skip if the body contains a `stackalloc` AND any simple
assignment whose left-hand side is an identifier matching one of those
parameter names. False positives only mean a few extra methods keep
`unsafe` - safer than emitting code that fails to build.
STJ output regenerated via `dotnet format`; STJ builds clean.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent 46fbbed commit 29a17a1
10 files changed
Lines changed: 854 additions & 796 deletions
File tree
- src
- libraries/System.Text.Json/src/System/Text/Json
- Document
- Reader
- Serialization/Converters/Value
- Writer
- tools/illink
- src/ILLink.RoslynAnalyzer
- test/ILLink.RoslynAnalyzer.Tests
Lines changed: 143 additions & 153 deletions
Large diffs are not rendered by default.
Lines changed: 21 additions & 26 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
249 | 249 | | |
250 | | - | |
251 | | - | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | | - | |
256 | | - | |
257 | | - | |
258 | | - | |
| 250 | + | |
259 | 251 | | |
260 | | - | |
261 | | - | |
262 | | - | |
263 | | - | |
264 | | - | |
265 | | - | |
266 | | - | |
267 | | - | |
268 | | - | |
269 | | - | |
270 | | - | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
271 | 255 | | |
272 | | - | |
273 | | - | |
274 | | - | |
| 256 | + | |
275 | 257 | | |
276 | | - | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
277 | 261 | | |
278 | 262 | | |
279 | 263 | | |
280 | 264 | | |
281 | 265 | | |
282 | 266 | | |
283 | 267 | | |
284 | | - | |
| 268 | + | |
285 | 269 | | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
286 | 281 | | |
287 | 282 | | |
288 | 283 | | |
| |||
Lines changed: 45 additions & 60 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
179 | | - | |
| 179 | + | |
180 | 180 | | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
189 | | - | |
| 181 | + | |
| 182 | + | |
190 | 183 | | |
191 | | - | |
192 | | - | |
| 184 | + | |
| 185 | + | |
193 | 186 | | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
| 187 | + | |
| 188 | + | |
200 | 189 | | |
201 | | - | |
202 | | - | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
203 | 195 | | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
204 | 199 | | |
205 | 200 | | |
206 | 201 | | |
| |||
229 | 224 | | |
230 | 225 | | |
231 | 226 | | |
232 | | - | |
| 227 | + | |
233 | 228 | | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
| 229 | + | |
| 230 | + | |
243 | 231 | | |
244 | | - | |
245 | | - | |
| 232 | + | |
| 233 | + | |
246 | 234 | | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | | - | |
251 | | - | |
252 | | - | |
| 235 | + | |
| 236 | + | |
253 | 237 | | |
254 | | - | |
255 | | - | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
256 | 243 | | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
257 | 247 | | |
258 | 248 | | |
259 | 249 | | |
| |||
283 | 273 | | |
284 | 274 | | |
285 | 275 | | |
286 | | - | |
| 276 | + | |
287 | 277 | | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
| 278 | + | |
293 | 279 | | |
294 | | - | |
295 | | - | |
296 | | - | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
297 | 283 | | |
298 | | - | |
299 | | - | |
| 284 | + | |
| 285 | + | |
300 | 286 | | |
301 | | - | |
302 | | - | |
303 | | - | |
304 | | - | |
305 | | - | |
306 | | - | |
307 | | - | |
308 | | - | |
309 | | - | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
310 | 292 | | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
311 | 296 | | |
312 | 297 | | |
313 | 298 | | |
| |||
Lines changed: 68 additions & 73 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 | | - | |
| 540 | + | |
545 | 541 | | |
546 | | - | |
547 | | - | |
| 542 | + | |
| 543 | + | |
548 | 544 | | |
549 | | - | |
550 | | - | |
551 | | - | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
552 | 559 | | |
553 | 560 | | |
554 | | - | |
555 | 561 | | |
556 | 562 | | |
557 | 563 | | |
558 | 564 | | |
559 | 565 | | |
560 | | - | |
561 | | - | |
562 | | - | |
563 | | - | |
564 | | - | |
565 | | - | |
566 | | - | |
567 | | - | |
568 | | - | |
569 | | - | |
570 | 566 | | |
571 | | - | |
| 567 | + | |
572 | 568 | | |
573 | | - | |
574 | | - | |
575 | | - | |
576 | | - | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
| 572 | + | |
| 573 | + | |
| 574 | + | |
| 575 | + | |
| 576 | + | |
577 | 577 | | |
578 | | - | |
579 | | - | |
580 | | - | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
581 | 582 | | |
582 | | - | |
583 | | - | |
584 | | - | |
585 | | - | |
586 | | - | |
587 | | - | |
588 | | - | |
589 | | - | |
| 583 | + | |
590 | 584 | | |
| 585 | + | |
| 586 | + | |
591 | 587 | | |
592 | | - | |
593 | | - | |
594 | | - | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
595 | 591 | | |
596 | | - | |
| 592 | + | |
597 | 593 | | |
598 | | - | |
599 | | - | |
600 | | - | |
601 | | - | |
602 | | - | |
603 | | - | |
604 | | - | |
605 | | - | |
606 | | - | |
607 | | - | |
608 | | - | |
609 | | - | |
610 | | - | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
611 | 603 | | |
612 | | - | |
613 | | - | |
614 | | - | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
615 | 607 | | |
616 | | - | |
617 | | - | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
618 | 611 | | |
619 | | - | |
620 | | - | |
| 612 | + | |
621 | 613 | | |
622 | | - | |
623 | 614 | | |
624 | | - | |
625 | | - | |
626 | | - | |
627 | | - | |
628 | | - | |
| 615 | + | |
| 616 | + | |
629 | 617 | | |
630 | | - | |
631 | | - | |
632 | | - | |
633 | | - | |
634 | | - | |
635 | 618 | | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
636 | 631 | | |
637 | 632 | | |
638 | 633 | | |
| |||
0 commit comments