The Wire · Showcase
ROSLYN FIXES RAZOR DIRECTIVE SPANS, RUNTIME ELIMINATES DEAD GC CODE
By RepoJournal · Filed · About .NET
Roslyn's completion engine now correctly reports attribute parameter locations in Razor directives, fixing a precision bug that cascaded into performance work across webtools.
The Roslyn team closed a long-standing span computation bug where directive attributes like @bind-value:format were reported as only @bind-value, omitting the colon and parameter portion [1]. This fix extracts from a larger effort to reduce webtools dependence during completion for measurable performance gains. In parallel, the runtime team is aggressively pruning dead code paths: they deleted the unused WBF_NoBarrier_CheckNotHeapInDebug write barrier form and its associated JIT helper, which were never emitted by the garbage collector [2]. On the JIT side, folding optimizations for double not/neg operations moved earlier in the pipeline, eliminating trivially unnecessary nodes and showing measurable throughput improvements in SPMI benchmarks [4]. The cDAC work continues reshaping allocation-heavy APIs like GetHeapSegments into callback-based EnumerateHeapSegments to reduce native heap pressure [5]. ASP.NET Core shipped a critical fix to the quarantine workflow where external contributor PRs were silently filtered by DIFC integrity checks, causing re-quarantine detection to fail and tests to be incorrectly unquarantined [3].
One email a day. Unsubscribe in one click.
Keep up with .NET in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Validate Razor directive completion spans in your tooling integration tests dotnet/roslyn [plan]
- → Review ASP.NET Core quarantine workflow changes if you maintain test infrastructure dotnet/aspnetcore [monitor]
- → Update cDAC consumers to use EnumerateHeapSegments callback pattern dotnet/runtime [plan]
References
- [1] Fix TryGetAttributeName nameLocation to include parameter name ↗ dotnet/roslyn
- [2] Delete unused WBF_NoBarrier_CheckNotHeapInDebug and CORINFO_HELP_ASSIGN_REF_ENSURE_NONHEAP (#128230) dotnet/runtime
- [3] Use deterministic pre-step for re-quarantine detection to bypass DIFC filtering ↗ dotnet/aspnetcore
- [4] Move the folding of double not/neg to gtFoldExpr ↗ dotnet/runtime
- [5] [cDAC] Reshape DacDbi API GetHeapSegments to EnumerateHeapSegments and implement in cDAC ↗ dotnet/runtime