NativeAOT-LLVM: WIP Merge apr26 - #3261
Draft
yowl wants to merge 2828 commits into
Draft
Conversation
Makes the assert use the full message used by the exception.
AsyncHelpers_ResumeInterpreterContinuationWorker receives an interior pointer that was not reported to the GC. It seems like this issue was happening only in InterpMode=1. It is likely that in full interpreter mode, the continuation object was conservatively pinned by chance from the interpreter stack. Fixes random crashes in objects-captured runtime test.
…im targets (#126380)
`PublishTrimmed` crashes with `NotSupportedException: TypeDefinition
cannot be resolved from 'Mono.Cecil.ArrayType'` when a `TypeMap`
attribute specifies an array type as its trim target (e.g.,
`typeof(Foo[])`).
Root cause (ILLink): `LinkContext.Resolve` throws for any
`TypeSpecification` that isn't a `GenericInstanceType`. Array types,
pointer types, and byref types all fall into this category.
Root cause (ILCompiler):
`ExternalTypeMapNode.GetConditionalStaticDependencies` used
`context.NecessaryTypeSymbol(trimmingTargetType)` as the condition node.
When the trim target is `Foo[]`, the TypeMap entry should be present
whenever `Foo` (the element type) is reachable — but
`NecessaryTypeSymbol(Foo[])` is a different node from
`NecessaryTypeSymbol(Foo)` and is only transitively marked when `Foo[]`
itself is used. If code only uses `Foo` (e.g., `new Foo()`), the
condition never fires and the entry is silently dropped.
# Description
**ILLink (`TypeMapHandler.cs`):**
- **`TypeMapHandler.AddExternalTypeMapEntry`**: Strip non-resolvable
`TypeSpecification` wrappers (array, pointer, byref, etc.) from the trim
target before passing to `RecordTypeMapEntry`, using the element type
instead.
- **`TypeMapHandler.AddProxyTypeMapEntry`**: Same fix applied
symmetrically to the source type parameter. Corrected the comment to
accurately state that `TypeMapAssociationAttribute` has two constructor
type arguments (source and proxy).
- **`TypeMapHandler.MarkTypeMapAttribute`**: Same
`TypeSpecification`-stripping fix applied before calling
`_context.Resolve(targetType)`.
- **`TypeMapHandler.UnwrapToResolvableType`**: The three previously
duplicate stripping loops have been extracted into a single `private
static TypeReference UnwrapToResolvableType(TypeReference)` helper, so
future fixes only need to be made in one place. All call sites use
idiomatic C# property pattern matching (`TypeSpecification {
ElementType: var elementType }`) to avoid explicit casts.
**ILCompiler (`ExternalTypeMapNode.cs`):**
- **`ExternalTypeMapNode.GetEffectiveTrimTargetType`**: New private
static helper that strips `ParameterizedType` wrappers (arrays,
pointers, byrefs) to reach the element type. `InstantiatedType`
(generics like `List<T>`) does not extend `ParameterizedType` and is
correctly left alone.
- **`ExternalTypeMapNode.GetConditionalStaticDependencies`** and
**`GetMarkedEntries`**: Updated to strip the trim target type via
`GetEffectiveTrimTargetType` and use `NecessaryTypeSymbol` on the
resulting element type. This matches ILLink's stripping behavior: the
TypeMap entry is included whenever the element type is reachable (via
`new Foo()`, `is Foo` casts, array construction `new Foo[n]`, etc.),
regardless of whether `Foo[]` itself is explicitly used.
```csharp
// Before fix: crashes (ILLink) or silently drops entry (ILCompiler)
[assembly: TypeMap<TestTypeMap>("Key", typeof(SomeTarget), typeof(Foo[]))]
// After fix (ILLink): strips Foo[] → Foo, uses Foo as the trim dependency
// After fix (ILCompiler): strips Foo[] → Foo, uses NecessaryTypeSymbol(Foo) as the condition
// The TypeMap entry is included iff Foo (the element type) is trimmer-reachable
```
Both fixes handle nested arrays (`Foo[][]` → `Foo`), pointer types
(`Foo*[]` → `Foo`), multi-dimensional arrays (`Foo[,]` → `Foo`), and
mixed cases like `List<Foo>[]` (strips to `List<Foo>`, which is not a
`ParameterizedType`).
# Customer Impact
`PublishTrimmed` builds fail with an unhandled `NotSupportedException` /
fatal ILLink error when any assembly attribute uses an array type as a
`TypeMap` trim target. In ILCompiler (`PublishAot`), the TypeMap entry
for an array trim target whose element type is reachable is silently
dropped. No workaround short of removing the array type.
# Regression
No — this is a new feature (`TypeMap`) that never handled array trim
targets correctly in either ILLink or ILCompiler.
# Testing
Added test cases to `TypeMap.cs` (ILLink / ILCompiler trimming tests):
- `TrimTargetIsUsedArrayType`: array trim target whose element type is
reachable (via `new ArrayTypeTrimTargetClass()`) — attribute must be
preserved; verified with `KeptAttributeAttribute`.
- `TrimTargetIsUnusedArrayType`: array trim target whose element type is
unreachable — attribute and target types are removed; verified with
explicit `RemovedTypeInAssembly("test", ...)` assertions on both
`ArrayTypeTrimTargetUnusedClass` and `ArrayTypeTrimTargetUnusedTarget`.
Added `TestInteropMapArrayTrimming` to
`src/tests/nativeaot/SmokeTests/TrimmingBehaviors/DeadCodeElimination.cs`
(NativeAOT smoke test):
- 7 `TypeMap` entries (A–G) with array trim targets covering `T[]`,
`T[,]`, and `T*[]` variants.
- `MakeGenerics<T>()` is a generic method that constructs `TrimTarget1
[1]`, `TrimTarget2 [1,1]`, `TrimTarget3 *[1]`, and `TrimTarget6[1]`,
invoked via
`typeof(TestInteropMapArrayTrimming).GetMethod(nameof(MakeGenerics)).MakeGenericMethod([GetAtom()]).Invoke(null,
[])`. Entry G is rooted via an `is TrimTarget7[]` cast.
- `Atom` class and `GetAtom()` method are present to provide the generic
type argument for the reflection-based call.
- Struct declarations `TrimTarget1` through `TrimTarget4` use trailing
spaces before the semicolon (e.g., `TrimTarget1 ;`) to visually
distinguish the array-targeted trim types from the non-array ones.
- Verifies entries A, B, C, F, G are present in the map using
`TryGetValue`; verifies entries D, E are absent (element type
unreachable) also using `TryGetValue` — `ContainsKey` is not used
because `TypeMapLazyDictionary` throws `NotSupportedException` for that
method.
Both existing `Reflection.TypeMap` and `Reflection.TypeMapEntryAssembly`
tests pass.
# Risk
Low. The ILLink change is localized to `TypeMapHandler` — three call
sites and one new private static helper. The ILCompiler change is
localized to `ExternalTypeMapNode` — two methods updated and one new
private static helper. The NativeAOT smoke test addition is additive
only. No behavior change for existing valid (non-array) trim targets.
# Package authoring no longer needed in .NET 9
IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet
package's csproj to enable building and bump the version.
Keep in mind that we still need package authoring in .NET 8 and older
versions.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jkoritzinsky <1571408+jkoritzinsky@users.noreply.github.com>
Co-authored-by: Jeremy Koritzinsky <jekoritz@microsoft.com>
Co-authored-by: MichalStrehovsky <13110571+MichalStrehovsky@users.noreply.github.com>
Co-authored-by: Michal Strehovský <MichalStrehovsky@users.noreply.github.com>
…seekable file (#126844) Reverts all System.Console source changes from PR #125512 (which introduced `RandomAccess.Read`/`Write` based I/O) back to the original `Interop.Sys.Read`/`Write` implementation. The `FileStream`-based approach will be revisited separately. Adds regression tests that verify `Console.OpenStandardInput().CopyTo()` and `Console.OpenStandardOutput().Write()` work correctly when stdin/stdout is redirected to a seekable file. fixes #126843 Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com>
…126559) This PR replace inline `throw new FormatException()` statements in `JsonElement.GetSByte`, `GetByte`, `GetInt16`, and `GetUInt16` with `ThrowHelper.ThrowFormatException` calls, consistent with the pattern established in #61746.
…ported on Apple mobile (#127057) ## Description Move `System.ComponentModel.Composition.Tests` in `tests.proj` from the `#124344` group to `Not supported on Apple mobile`, matching mono and browser. Additional trimming changes are needed and MEF extension scenarios aren't different on Apple mobile compared to desktop. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary Replaces four `Enum.HasFlag` calls in `System.Net.WebSockets` with the bitwise `(value & flag) != 0` idiom used throughout the rest of the repo. This follows the explicit guidance from @stephentoub in a prior review on this same file (#107662): > We generally prefer to avoid using HasFlag, even though the JIT does optimize away the boxing in tier 1. See the [original review comment](dotnet/runtime#107662 (comment)). That PR removed one `HasFlag` usage in `WebSocketStateHelper.cs`; this PR finishes the job by replacing the remaining occurrences across the library. It also brings internal consistency to `WebSocketStateHelper.cs`. `ThrowIfInvalidState` already uses the bitwise form `(state & validStates) == 0` a few lines below the previous `IsValidSendState` implementation. No behavior changes. ## Changes | File | Change | |---|---| | `WebSocketStateHelper.cs` | `IsValidSendState`, now matches the bitwise form already used by `ThrowIfInvalidState` in the same file | | `ManagedWebSocket.cs` | `endOfMessage` / `disableCompression` checks in `SendAsync` | | `WebSocket.cs` | `SendAsync` virtual overload's `endOfMessage` check |
- [x] Inspect `_DbgBreakCheck` call sites and confirm JIT usage scope - [x] Run mandatory baseline build (`./build.sh clr+libs+host`) successfully before edits - [x] Remove `_DbgBreakCheck` call(s) from `src/coreclr/jit` with minimal code changes - [x] Build and run relevant JIT/CoreCLR validation for the modified area - [x] Run final review/security validation and create/open the PR Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jakobbotsch <7887810+jakobbotsch@users.noreply.github.com>
## Summary
This PR specify `Count` as the initial capacity of `List<T>` to avoid
unnecessary heap reallocations while collecting items via
`BreadthFirstTreeWalk`, and replace the `while` loop that called
`RemoveAt(Count - 1)` after each removal with a simple reverse `for`
loop over the list by index.
## Benchmark Results
| Method | Job | Toolchain | Count | Mean | Error | StdDev | Median |
Min | Max | Ratio | RatioSD | Code Size | Allocated | Alloc Ratio |
|----------------- |----------- |------------------ |------
|-------------:|-----------:|-----------:|-------------:|-------------:|------------:|------:|--------:|----------:|----------:|------------:|
| TreeSubSet_Clear | Job-WYLMTD | \main\corerun.exe | 10 | 10.650 us |
1.1232 us | 1.2935 us | 10.350 us | 9.100 us | 13.20 us | 1.00 | 0.00 |
267 B | 640 B | 1.00 |
| TreeSubSet_Clear | Job-SHTHJF | \pr\corerun.exe | 10 | 8.856 us |
0.5452 us | 0.5833 us | 8.800 us | 8.000 us | 10.20 us | 0.84 | 0.11 |
267 B | 520 B | 0.81 |
| | | | | | | | | | | | | | | |
| TreeSubSet_Clear | Job-WYLMTD | \main\corerun.exe | 100 | 23.930 us |
1.6118 us | 1.8562 us | 23.850 us | 21.100 us | 28.10 us | 1.00 | 0.00 |
267 B | 2752 B | 1.00 |
| TreeSubSet_Clear | Job-SHTHJF | \pr\corerun.exe | 100 | 24.790 us |
1.7995 us | 2.0723 us | 24.800 us | 21.100 us | 28.50 us | 1.04 | 0.11 |
267 B | 2024 B | 0.74 |
| | | | | | | | | | | | | | | |
| TreeSubSet_Clear | Job-WYLMTD | \main\corerun.exe | 1000 | 186.237 us
| 10.4397 us | 11.6037 us | 188.900 us | 164.800 us | 207.10 us | 1.00 |
0.00 | 267 B | 17384 B | 1.00 |
| TreeSubSet_Clear | Job-SHTHJF | \pr\corerun.exe | 1000 | 185.722 us |
12.6666 us | 13.5531 us | 193.500 us | 162.600 us | 200.10 us | 1.00 |
0.09 | 267 B | 13016 B | 0.75 |
| | | | | | | | | | | | | | | |
| TreeSubSet_Clear | Job-WYLMTD | \main\corerun.exe | 10000 | 1,113.750
us | 20.5663 us | 18.2315 us | 1,111.300 us | 1,069.700 us | 1,141.80 us
| 1.00 | 0.00 | 267 B | 197776 B | 1.00 |
| TreeSubSet_Clear | Job-SHTHJF | \pr\corerun.exe | 10000 | 1,145.594 us
| 34.4062 us | 33.7915 us | 1,145.000 us | 1,103.200 us | 1,216.40 us |
1.03 | 0.03 | 267 B | 106432 B | 0.54 |
```csharp
[MemoryDiagnoser]
[BenchmarkCategory(Categories.Libraries, Categories.Collections, Categories.GenericCollections)]
public class Perf_SortedSet_TreeSubSet_Clear
{
private SortedSet<int> viewSet;
[Params(10, 100, 1000, 10000)]
public int Count;
[GlobalSetup]
public void Setup()
{
var set = new SortedSet<int>(Enumerable.Range(0, Count));
viewSet = set.GetViewBetween(0, Count - 1);
}
[IterationSetup]
public void IterationSetup()
{
var set = new SortedSet<int>(Enumerable.Range(0, Count));
viewSet = set.GetViewBetween(0, Count - 1);
}
[Benchmark]
public int TreeSubSet_Clear()
{
viewSet.Clear();
return viewSet.Count;
}
}
```
… aggressive trimming in Release (#127054) ## Description Part of splitting #125439 into smaller, self-contained PRs. The Debug `AllSubsets_CoreCLR_Smoke` jobs for tvOS, iOSSimulator, and MacCatalyst are unstable and tracked in #124344. In the corresponding Release jobs, enable `EnableAggressiveTrimming` and `EnableAdditionalTimezoneChecks` so CI tests the trimmed library build path that ships to customers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…mobile CoreCLR simulators (#127065) ## Description Exclude three test projects that fail on Apple mobile CoreCLR simulators from the library test run. Tracking issue: dotnet/runtime#124344. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…tead of NativeAOT (#127055) ## Description This PR updates IsMetadataUpdateSupported to aggressive trimming instead of Native AOT to avoid using ActiveIssue for Apple mobile tests that are not supported. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… in GCToOSInterface::VirtualReset (#126966) main PR # Description `VirtualReset` was combining `MADV_FREE` (8) and `MADV_DONTDUMP` (16) via bitwise OR and passing the result (`24`) to a single `madvise()` call. `madvise()` takes a single advice constant — not a bitmask — so this was either rejected as `EINVAL` (kernels < 5.18) or silently matched `MADV_DONTNEED_LOCKED` (kernels ≥ 5.18), a completely different operation. **Fix:** Issue two separate `madvise()` calls, and use `posix_madvise(POSIX_MADV_DONTNEED)` as a proper fallback only when `MADV_FREE` is not available: ```cpp // Before (broken) int madviseFlags = 0; madviseFlags |= MADV_DONTDUMP; // 16 madviseFlags |= MADV_FREE; // 8 st = madvise(address, size, madviseFlags); // passes 24 — invalid // After (fixed) #ifdef MADV_DONTDUMP st = madvise(address, size, MADV_DONTDUMP); // coredump hint (independent) #endif #ifdef MADV_FREE st = madvise(address, size, MADV_FREE); // primary: page reclaim #elif defined(HAVE_POSIX_MADVISE) st = posix_madvise(address, size, POSIX_MADV_DONTNEED); // fallback when MADV_FREE unavailable #endif ``` The `posix_madvise(POSIX_MADV_DONTNEED)` path is an `#elif` chained to `#ifdef MADV_FREE`, making it a proper fallback that only executes when `MADV_FREE` is unavailable. The guard uses `MADV_FREE` directly (the kernel header constant) rather than `HAVE_MADV_FREE`, which was never defined by the GC unix CMake build system. The previous `#if defined(HAVE_POSIX_MADVISE) && !defined(MADV_DONTDUMP)` condition was semantically unrelated to that fallback decision. This matches the pattern already used by `VirtualReserveInner` and `VirtualCommitInner` in the same file. Introduced by #95643. # Customer Impact On all Linux builds where both `MADV_DONTDUMP` and `MADV_FREE` are defined (i.e., all modern glibc/x86-64 Linux): - **Kernels < 5.18**: GC never successfully resets pages to the OS — memory pressure behavior is broken and `MADV_DONTDUMP` is never applied (reset memory appears in coredumps). - **Kernels ≥ 5.18**: `MADV_DONTNEED_LOCKED` is invoked instead — immediately discarding pages including locked pages, which is semantically incorrect and potentially dangerous. Additionally, because `HAVE_MADV_FREE` was never defined by the build system, the `MADV_FREE` reclaim path was silently compiled out on all platforms, falling through to `posix_madvise(POSIX_MADV_DONTNEED)` instead. Using `MADV_FREE` directly as the preprocessor guard restores the intended behavior. # Regression Yes — introduced in .NET 9 by #95643 (an optimization to reduce syscall count). # Testing The bug is a straightforward misuse of a syscall interface. The fix has been manually verified against the Linux `madvise(2)` man page and kernel headers. No existing automated test infrastructure covers `madvise()` advice values directly. # Risk Low. The change is a minimal, targeted fix: replace one combined `madvise()` call with two separate calls, restructure the `posix_madvise` fallback as a proper `#elif`, and use the `MADV_FREE` kernel constant directly as the preprocessor guard. No logic changes, no new APIs, no structural changes. # Package authoring no longer needed in .NET 9 IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet package's csproj to enable building and bump the version. Keep in mind that we still need package authoring in .NET 8 and older versions. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: janvorli <10758568+janvorli@users.noreply.github.com>
…bile (#127082) Fixes test failures on Android, iOS, tvOS, and MacCatalyst discovered in build [#1383320](https://dev.azure.com/dnceng-public/cbb18261-c48f-4abb-8651-8cdcb5474649/_build/results?buildId=1383320). ## Failure **Test**: `System.Runtime.Loader.Tests.AssemblyLoadContextTest` **Helix job**: `c1e7d30b-9f1d-4f11-9117-cfe78a4df8b9` **Work item**: `System.Runtime.Loader.Tests` **Platform**: android-arm64 (also affects all mobile platforms) ### Failing tests 1. `InvalidCastException_DifferentALC_ShowsAssemblyInfo` 2. `InvalidCastException_GenericTypeArg_DifferentALC_ShowsAssemblyInfo` ### Root cause Both tests call `LoadFromAssemblyPath(typeof(AssemblyLoadContextTest).Assembly.Location)`. On mobile platforms, `Assembly.Location` returns an empty string because assemblies are loaded from the APK/app bundle, not from individual files on disk. ````text [FAIL] System.Runtime.Loader.Tests.AssemblyLoadContextTest.InvalidCastException_DifferentALC_ShowsAssemblyInfo System.ArgumentException : Path "" is not an absolute path. (Parameter 'assemblyPath') at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String assemblyPath) at System.Runtime.Loader.Tests.AssemblyLoadContextTest.InvalidCastException_DifferentALC_ShowsAssemblyInfo() ```` ### Fix Add `nameof(PlatformDetection.IsNotMobile)` to both tests' `ConditionalFact` attributes to skip on mobile platforms where `Assembly.Location` is not available. ## Testing These tests will be skipped on Android, iOS, tvOS, and MacCatalyst in the `runtime-extra-platforms` pipeline. Desktop platforms will continue to run the tests. --- > [!NOTE] > This PR was created by GitHub Copilot after analyzing mobile platform CI failures in the runtime-extra-platforms pipeline. Contributes to #127080 > Generated by [Mobile Platform Failure Scanner](https://github.com/dotnet/runtime/actions/runs/24566685884/agentic_workflow) · ● 4.9M · [◷](https://github.com/search?q=repo%3Adotnet%2Fruntime+%22gh-aw-workflow-id%3A+mobile-scan%22&type=pullrequests) <!-- gh-aw-agentic-workflow: Mobile Platform Failure Scanner, engine: copilot, model: claude-sonnet-4.5, id: 24566685884, workflow_id: mobile-scan, run: https://github.com/dotnet/runtime/actions/runs/24566685884 --> <!-- gh-aw-workflow-id: mobile-scan --> --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: kotlarmilos <11523312+kotlarmilos@users.noreply.github.com>
PR #124967 accidentally committed two lines with CRLF endings into a file that uses LF, causing git to perpetually report the file as modified on Windows (core.autocrlf=true). Renormalize to consistent LF endings. cc: @MihaZupan Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Teach redundant branch elimination to keep jump threading through PHI-based blocks when the PHI uses can be fully accounted for in the block and its immediate successors. Rewrite the affected successor SSA/VN uses, keep dominating-block threading conservative, and add focused regression coverage for the new PHI-based cases. Fix included here that was not in #126812: ensure that field uses of locals get the proper VN updates. Fixes #126976.
## Description This adds a daily scheduled agentic workflow that scans the `runtime-extra-platforms` https://dev.azure.com/dnceng-public/public/_build?definitionId=154 for Apple mobile (iOS, tvOS, MacCatalyst) and Android failures on `main`. ## What it does - **Daily scan**: queries the latest completed build, finds failed mobile jobs, reads failure logs - **Triage**: classifies failures as infrastructure (reports on tracking issues with machine details) or code (traces to recent commits) - **Fix**: opens draft PRs for code failures, caps at 2 PRs, 2 issues, 5 comments per run ## Files | File | Purpose | |---|---| | `.github/skills/mobile-platforms/SKILL.md` | Domain knowledge: CI pipeline structure, code paths, failure triage, platform gotchas | | `.github/workflows/mobile-scan.md` | Daily scan workflow (schedule trigger, write-access gated) | | `.github/workflows/mobile-scan.lock.yml` | Compiled lock file | ## Safety & permissions The workflow source (`.md`) declares **read-only** permissions (`contents: read`, `issues: read`, `pull-requests: read`). The agent job itself has no direct write access to the repository. All write operations (creating draft PRs, issues, and comments) go through the **safe-outputs** boundary, which runs in a separate job with its own scoped permissions. Safe-outputs enforces strict caps: | Output | Cap | Constraints | |---|---|---| | Draft PRs | max 2 | Title prefix `[mobile] `, labels `agentic-workflows`, protected files/paths fallback to issue | | Issues | max 2 | Labels `agentic-workflows`, `untriaged` | | Comments | max 5 | On existing issues/PRs only | Additional safeguards: - Only admins, maintainers, and contributors with write access can trigger via `workflow_dispatch` - External skill content (helix-investigation) is fetched pinned to a specific commit SHA, not a mutable branch - Log excerpts are sanitized before posting (no secrets, tokens, PII) - Concurrency group prevents overlapping runs - Network allowlist restricts outbound access to Azure DevOps, Helix, GitHub, and Helix blob storage only --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
cgroup code was being compiled and linked on macOS and FreeBSD even though cgroups are a Linux-specific mechanism. While this caused no runtime harm (functions returned 0/false due to missing `/sys/fs/cgroup`), the code was dead weight on those platforms. Fixes dotnet/runtime#99363 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jkotas <6668460+jkotas@users.noreply.github.com> Co-authored-by: Jan Kotas <jkotas@microsoft.com>
…ror path (#127139)
…ing (#127105) **The essence of the bug:** During decompression, a portion of compressed data ends exactly at the boundary of a 64 kb buffer, and the remaining bytes, not yet decompressed by the decoder, are waiting for the next portion, resulting in a exception. The buffer is physically full, and AvailableSpan returns an empty fragment, ``Span<byte>`` empty reading from the file into an empty Span returns 0 bytes read. **Solution:** Checks have been added to the main Read and ReadAsync loops. If AvailableLength is zero, we force a call to ``_buffer.EnsureAvailableSpace(1);.`` the bytes are shifted to the beginning of the array, the read is released, and the stream then reads new data. --------- Co-authored-by: Miha Zupan <mihazupan.zupan1@gmail.com>
…27156) When stepping next at the last line of Main, the debugger lands in the managed Environment.CallEntryPoint which stops the debuggee in a frame with no source info rather than the process simply exiting. Extend the existing IsInteropStub check in TriggerSingleStep to also recognize g_pEnvironmentCallEntryPointMethodDesc. When the single-step lands there, disable it and let the process exit naturally, matching the previous behavior when the return landed in native code. Found with internal VS debugger testing. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jan Kotas <jkotas@microsoft.com>
Remove windows runs from the pipeline. Many suites fail with com related tests and windows is not really relevant as a target for now. We still run full runtime tests on windows. STJ.Tests - jit 2min - interpmode1 15min - interpmode3 >1.5h This also uncovers a new set of failures that we will need to address
…essStartInfo.Arguments` for the string+args overload (#127116) `StartAndForget_StartsProcessAndReturnsValidPid` was failing intermittently for `useProcessStartInfo: false` because the test passed `template.StartInfo.ArgumentList`, while `RemoteExecutor` populates `Arguments`. This could launch `dotnet` with effectively empty/incorrect arguments and exit early. fixes #127107 Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: adamsitnik <6011991+adamsitnik@users.noreply.github.com> Co-authored-by: jkotas <6668460+jkotas@users.noreply.github.com>
- Rewrite WasmImportThunk generation in terms of the TransitionBlock and the interpreter calling convention - Update the ArgIterator in crossgen2 to handle the interpreter calling convention, or at least something pretty close to it. - Move the adjustment of the stack pointer global to the `DelayLoad_MethodCall` function NOTE: We have not yet handled all of the variation between the interpreter and R2R calling conventions, but this is close enough to make good progress. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This resolves #127138 In some cases we need to ensure the introduced node is explicitly marked as morphed since it may not be returning through `fgMorphHWIntrinsic`. This was a pre-existing issue, but one that only surfaced due to the fixed `IsVectorPerElementMask` check.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
If we partially jump-thread a block with PHIs, the remaining preds that target block may all bring in the same SSA def for some of the PHIs. If so, remove the PHIs and update the SSA/VN for the PHI uses in the block. In particular there may just be one ambiguous pred. Fixes #126703. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…e CoreCLR (#127058) ## Description Part of splitting #125439 into smaller, self-contained PRs. On Apple mobile platforms, test assemblies are deployed as files inside the `.app` bundle rather than being embedded as managed resources in the host test assembly. As a result, `Assembly.GetManifestResourceStream` returns null in `ResourceAssemblyLoadContext` and any test that relies on it fails. This PR updates `ResourceAssemblyLoadContext` to fall back to loading the assembly from `AppContext.BaseDirectory` when the embedded resource is not present. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <copilot@github.com>
… enum class (#127148)
## Description When DAC/DBI seeds StackFrameIterator from a CONTEXT pointing into interpreted code, m_crawl.pFrame is initialized to the thread's top explicit Frame, which is the InterpreterFrame that owns the executing InterpMethodContextFrame chain. ResetRegDisp reads the owning InterpreterFrame* from the CONTEXT's first-arg register and advances m_crawl.pFrame past it before ProcessCurrentFrame runs. ## Tests Fixes the following interpreter debugger test failures: - `StackWalking.NestedException` - `StackWalking.ChildParentTest` --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jan Vorlicek <janvorli@microsoft.com>
Without this condition, fresh test runs fail because there are no 'done' files indicating r2r compilation already completed
…26649) > [!NOTE] > This PR description was generated with Copilot. Reinstates the LINQ convenience overloads from #121998 and #121999 that were reverted in #126624, while also fixing the build break that caused the revert. ## Summary - preserves the original API/implementation commits by cherry-picking them onto this branch - fixes the `System.Linq.AsyncEnumerable` test build break by making the affected async selectorless overload calls explicit where inference was insufficient during the multi-target build ## Validation - `build.cmd clr+libs -rc release` - `.\dotnet.cmd build .\src\libraries\System.Linq.AsyncEnumerable\tests\System.Linq.AsyncEnumerable.Tests.csproj /t:Test --no-restore` - `.\dotnet.cmd build .\src\libraries\System.Linq\tests\System.Linq.Tests.csproj /t:Test --no-restore` - `.\dotnet.cmd build .\src\libraries\System.Linq.Queryable\tests\System.Linq.Queryable.Tests.csproj /t:Test --no-restore` --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: Shay Rojansky <roji@roji.org> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: roji <1862641+roji@users.noreply.github.com>
…arm (#127225)" (#127547) Reverts #127225 Closes #127500 android-arm is crashing in CI with `SIGSEGV` in `System.DateTime.get_Now()`. See #127500. Reverting while the underlying crash is investigated. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ol knob design (#127033) Fix IMUL register encoding, remove embedded REX prefix in opcode when necessary Disable the NDD form of CMOV due to discrepant semantic of original CMOV and NDD form, follow-up PR to reintroduce the remaining NCI instructions (CTEST and CFCMOV) has been planned. Separate PP2 and PPX control knob Hide ConditionalChaining (`DOTNET_EnableApxConditionalChaining`) behind APX (`DOTNET_EnableAPX`) knob Disable IDIV/DIV due to lack of exception handling for REX2/EVEX prefixed instructions in VM Disable TEST ACC form for REX2, it is not compatible as the form does not use EGPRs. resolve merge errors --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Kendall Gonzalez Leon <kendall.gonzalez.leon@intel.com>
## Description This PR enables StackTrace library tests on Apple mobile. The line numbers are not displayed on Apple mobile, tracked in dotnet/runtime#124087. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When multiple awaits have common context handling logic during suspension we can share that logic completely by jumping to a common block. This PR implements that size optimization.
This adds floating->long/ulong cast codegen for AVX-512 and AVX10.2 on x86. With this, all non-overflow casts are now hardware accelerated. This is the last bit pulled from #116805. Typical Diff (double->long AVX-512): ```diff - sub esp, 8 - vzeroupper - vmovsd xmm0, qword ptr [esp+0x0C] - sub esp, 8 - ; npt arg push 0 - ; npt arg push 1 - vmovsd qword ptr [esp], xmm0 - call CORINFO_HELP_DBL2LNG - ; gcr arg pop 2 + vmovsd xmm0, qword ptr [esp+0x04] + vcmpordsd k1, xmm0, xmm0 + vcmpge_oqsd k2, xmm0, qword ptr [@rwd00] + vcvttpd2qq xmm0 {k1}{z}, xmm0 + vpblendmq xmm0 {k2}, xmm0, qword ptr [@RWD08] {1to2} + vmovd eax, xmm0 + vpextrd edx, xmm0, 1 - add esp, 8 ret 8 +RWD00 dq 43E0000000000000h +RWD08 dq 7FFFFFFFFFFFFFFFh -; Total bytes of code 31 +; Total bytes of code 53 ``` Full [Diffs](https://dev.azure.com/dnceng-public/public/_build/results?buildId=1391699&view=ms.vss-build-web.run-extensions-tab) Breakdown of the double->long asm: ```asm ; load the scalar double vmovsd xmm0, qword ptr [esp+0x04] ; set the low bit of k1 if the scalar value is not NaN vcmpordsd k1, xmm0, xmm0 ; set the low bit of k2 if the input was greater than or equal to 2^63 (nearest double greater than long.MaxValue) vcmpge_oqsd k2, xmm0, qword ptr [@rwd00] ; convert, using k1 mask bit. if the mask bit is not set (meaning we have a NaN), set the value to zero vcvttpd2qq xmm0 {k1}{z}, xmm0 ; if the low bit of k2 is set (meaning overflow), set the value to long.MaxValue, otherwise take the conversion result vpblendmq xmm0 {k2}, xmm0, qword ptr [@RWD08] {1to2} ; extract the two 32-bit halves of the long result vmovd eax, xmm0 vpextrd edx, xmm0, 1 ``` --------- Co-authored-by: Tanner Gooding <tagoo@microsoft.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jan Kotas <jkotas@microsoft.com>
This is the `X25519DiffieHellmanOpenSsl` implementation that works with EVP_PKEY handles.
## Description `DeadThreads` creates threads at a very high rate, making it unsuitable for GC stress runs where frequent GCs slow execution enough to cause OOM or excessive paging. ### Changes - **`src/tests/baseservices/threading/DeadThreads/DeadThreads.csproj`**: Added `<GCStressIncompatible>true</GCStressIncompatible>` to opt the test out of GC stress (GCStress3/GCStressC) runs. ## AI Generated Content Notice > [!NOTE] > This PR description was generated by GitHub Copilot. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: VSadov <8218165+VSadov@users.noreply.github.com>
…dExportedTypeByName (#127471) > [!NOTE] > This PR was AI/Copilot-generated. ## Summary Implements 4 IMetaDataImport/IMetaDataAssemblyImport methods that were previously legacy-only stubs in `MetaDataImportImpl`. These APIs are used by an internal debugger and need cDAC implementations for no-fallback mode. Also adds comprehensive DEBUG parity validation across all cDAC-implemented methods and improves code quality. ## Changes ### New cDAC implementations in `MetaDataImportImpl.cs` | Method | Interface | Description | |--------|-----------|-------------| | `EnumTypeDefs` | IMetaDataImport | Enumerates all TypeDef tokens via `MetadataReader.TypeDefinitions` | | `EnumMethods` | IMetaDataImport | Enumerates methods of a TypeDef via `TypeDefinition.GetMethods()` | | `GetExportedTypeProps` | IMetaDataAssemblyImport | Returns exported type name (namespace.name), implementation token, TypeDef ID, and flags | | `FindExportedTypeByName` | IMetaDataAssemblyImport | Finds an exported type by full name, with nested type support via enclosing type token | All implementations follow the established patterns in MetaDataImportImpl: - try/catch with HResult return - `FillEnum` infrastructure for enum methods - `CopyStringToBuffer` with truncation → `CLDB_S_TRUNCATION` - `CLDB_E_RECORD_NOTFOUND` for missing records - `#if DEBUG` validation against legacy DAC ### Comprehensive DEBUG parity validation Added or improved `#if DEBUG` validation blocks for **all** cDAC-implemented methods: - **3 enum methods** (`EnumInterfaceImpls`, `EnumFields`, `EnumGenericParams`) — added missing DEBUG blocks that enumerate via the legacy DAC and compare token lists - **9 Get methods** — added string content validation (not just length) by passing `stackalloc` name buffers to the legacy DAC and comparing the actual strings - **2 Get methods** (`GetGenericParamProps`, `GetParamProps`) — added name length + string validation that was previously missing entirely - All enum DEBUG blocks follow the SOSDacImpl pattern: placed **after** the catch block, not inside the try ### Code quality improvements - **`EcmaMetadataUtils.GetRowId`** made public; added `private static int GetRID(uint token)` helper in `MetaDataImportImpl` to replace all raw `& 0x00FFFFFF` RID mask usage - **Named CLDB HRESULT constants** (`CldbHResults.CLDB_S_TRUNCATION`, etc.) used in tests instead of magic hex literals ### Dump tests in `MetaDataImportDumpTests.cs` - `EnumTypeDefs_MatchesMetadataReader` — enumerates TypeDefs via cDAC and compares against `MetadataReader.TypeDefinitions` - `EnumMethods_MatchesMetadataReader` — enumerates methods per TypeDef and compares against `MetadataReader` ### Unit tests in `MetaDataImportImplTests.cs` - 11 new unit tests covering: basic enumeration, pagination, per-TypeDef method enumeration, global methods, empty method lists, exported type properties, nested exported types, truncation, find by name, nested find, and not-found cases - Updated `NotImplementedMethods_ReturnENotImpl` to remove `EnumTypeDefs` (now implemented) - Added exported type entries to shared test metadata builder ## Testing - **1856 unit tests** pass (all cDAC tests) - **5 dump tests** pass (MetaDataImport-specific) - Build succeeds with 0 errors, 0 warnings --------- Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Description Replaces the legacy-delegation stub in `DacDbiImpl.EnumerateAssembliesInAppDomain` with a managed implementation using the `ILoader` contract, mirroring the native C++ logic in `dacdbiimpl.cpp:4412–4449`. ### Changes - **`IDacDbiInterface.cs`**: Changed `fpCallback` parameter type from `nint` to `delegate* unmanaged<ulong, nint, void>` (consistent with `EnumerateThreads`) - **`DacDbiImpl.cs`**: Full implementation that: - Returns `S_OK` early on null `vmAppDomain` - Enumerates via `ILoader.GetModuleHandles` with `IncludeLoading | IncludeLoaded | IncludeExecution` - Resolves each `ModuleHandle` to an assembly pointer via `ILoader.GetAssembly` - Calls `fpCallback(assembly, pUserData)` per entry - `#if DEBUG` validation against legacy DAC (same pattern as `EnumerateThreads`) - DacDbiImplTests.cs - Add 5 tests covering zero AppDomain, null callback, single/multiple/empty assembly enumeration with mocked ILoade --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: barosiak <76071368+barosiak@users.noreply.github.com> Co-authored-by: Barbara Rosiak <brosiak@microsoft.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…Silicon (#127355) ## Problem On macOS Apple Silicon (observed on macOS 15), compressed self-contained single-file apps intermittently hit `AccessViolationException` crashes. With the repro provided in the issue, the failure rate was roughly 75% in a local run. `FlatImageLayout::LoadImageByCopyingParts` allocates the image region with `MEM_RESERVE_EXECUTABLE` (which maps to `MAP_JIT` on macOS) as `PAGE_READWRITE`, copies in all section bytes, then promotes executable sections to `PAGE_EXECUTE_READWRITE` via a second `mprotect`. On Apple Silicon, this `RW → RWX` transition on MAP_JIT memory has been observed to intermittently succeed at the API level but leave pages non-executable at the kernel level, producing the sporadic AVs. ## Fix On Apple Silicon (`HOST_OSX && HOST_ARM64`), avoid the unreliable transition: reserve the whole image region as `PAGE_NOACCESS` up front, then commit each section directly with its final runtime protection (`PAGE_EXECUTE_READWRITE` for exec, `PAGE_READWRITE` otherwise), copying executable content under `PAL_JitWriteProtect`. The `PROT_NONE → RWX` direction via a fresh commit is reliable; the problematic `RW → RWX` transition no longer occurs. Read-only sections are still downgraded from `PAGE_READWRITE` to `PAGE_READONLY` after the copy, which is a W-removing transition and is not implicated in the original bug. The non-Apple-Silicon code path is unchanged. ## Testing New test: `AppHost.Bundle.Tests.AppLaunch.SelfContained_Compressed_SpawnsChildren` (OSX-only). Adds a `launch_self` option to the `HelloWorld` test asset that spawns 5 copies of itself in parallel, and asserts the parent runs to completion. Local validation on Apple Silicon: - Without fix: parent crash with `AccessViolationException` in ~74% of trials at N=5 children (rises to ~98% at N≥12). - With fix: 0 failures across 50+ trials at N=5. --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…369) Several `TokenBasedNode` subclasses in ILTrim were not calling `CustomAttributeNode.AddDependenciesDueToCustomAttributes`, causing custom attributes on those metadata tables to be silently dropped during trimming.
1. Agent is sometimes ignoring the result of the version calculation script - make it more clear how to handle results. 2. Comment was duplicating issue body. Remove this. 3. Tag the PR's assignees to get attention. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
# Conflicts: # .github/policies/resourceManagement.yml # eng/Publishing.props # eng/Subsets.props # eng/common/core-templates/job/publish-build-assets.yml # eng/common/core-templates/job/source-build.yml # eng/common/core-templates/job/source-index-stage1.yml # eng/common/core-templates/post-build/post-build.yml # eng/common/templates/variables/pool-providers.yml # eng/native/gen-buildsys.cmd # eng/testing/tests.singlefile.targets # global.json # src/coreclr/CMakeLists.txt # src/coreclr/build-runtime.cmd # src/coreclr/clr.featuredefines.props # src/coreclr/clrdefinitions.cmake # src/coreclr/components.cmake # src/coreclr/gc/unix/cgroup.cpp # src/coreclr/jit/CMakeLists.txt # src/coreclr/jit/abi.h # src/coreclr/jit/alloc.cpp # src/coreclr/jit/compiler.cpp # src/coreclr/jit/gentree.cpp # src/coreclr/jit/jit.h # src/coreclr/jit/jitconfigvalues.h # src/coreclr/jit/lclvars.cpp # src/coreclr/jit/liveness.cpp # src/coreclr/jit/morph.cpp # src/coreclr/jit/register.h # src/coreclr/jit/regset.cpp # src/coreclr/jit/ssabuilder.cpp # src/coreclr/jit/target.h # src/coreclr/jit/treelifeupdater.cpp # src/coreclr/jit/utils.cpp # src/coreclr/jit/valuenum.cpp # src/coreclr/jit/valuenumfuncs.h # src/coreclr/nativeaot/BuildIntegration/Microsoft.DotNet.ILCompiler.SingleEntry.targets # src/coreclr/nativeaot/BuildIntegration/Microsoft.NETCore.Native.Publish.targets # src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/InternalCalls.cs # src/coreclr/nativeaot/Runtime/unix/cgroupcpu.cpp # src/coreclr/nativeaot/System.Private.CoreLib/src/Internal/Runtime/Augments/StackTraceMetadataCallbacks.cs # src/coreclr/nativeaot/System.Private.CoreLib/src/System.Private.CoreLib.csproj # src/coreclr/nativeaot/System.Private.CoreLib/src/System/Diagnostics/StackFrame.NativeAot.cs # src/coreclr/nativeaot/System.Private.CoreLib/src/System/Exception.NativeAot.cs # src/coreclr/runtime.proj # src/coreclr/tools/Common/Compiler/DependencyAnalysis/ObjectDataBuilder.cs # src/coreclr/tools/Common/Internal/Runtime/MetadataBlob.cs # src/coreclr/tools/Common/Internal/Runtime/ReadyToRunConstants.cs # src/coreclr/tools/Common/Internal/Text/Utf8StringBuilder.cs # src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs # src/coreclr/tools/Common/JitInterface/JitConfigProvider.cs # src/coreclr/tools/Common/TypeSystem/Common/TargetDetails.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/Target_Wasm/WasmJumpStubNode.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/Target_Wasm/WasmReadyToRunGenericHelperNode.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/Target_Wasm/WasmReadyToRunHelperNode.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/Target_Wasm/WasmTentativeMethodNode.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/Target_Wasm/WasmUnboxingStubNode.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/MetadataManager.cs # src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/MethodBodyDeduplicator.cs # src/coreclr/tools/aot/ILCompiler.Compiler/IL/ILImporter.Scanner.cs # src/coreclr/tools/aot/ILCompiler.RyuJit/Compiler/DependencyAnalysis/MethodCodeNode.cs # src/coreclr/tools/aot/ILCompiler.RyuJit/Compiler/RyuJitCompilationBuilder.cs # src/coreclr/tools/aot/ILCompiler.RyuJit/JitInterface/CorInfoImpl.RyuJit.cs # src/coreclr/tools/aot/ilc.slnx # src/coreclr/tools/aot/jitinterface/CMakeLists.txt # src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems # src/libraries/System.Runtime.InteropServices.JavaScript/gen/JSImportGenerator/JSExportGenerator.cs # src/libraries/System.Runtime.InteropServices.JavaScript/src/System.Runtime.InteropServices.JavaScript.csproj # src/libraries/System.Runtime.InteropServices.JavaScript/src/System/Runtime/InteropServices/JavaScript/JSHostImplementation.cs # src/libraries/native-binplace.proj # src/mono/browser/browser.proj # src/mono/browser/runtime/loader/config.ts # src/mono/browser/runtime/loader/polyfills.ts # src/tests/Common/CLRTest.Execute.Bash.targets # src/tests/Common/XUnitWrapperGenerator/XUnitWrapperGenerator.cs # src/tests/Common/tests.targets # src/tests/nativeaot/SmokeTests/Exceptions/Exceptions.cs # src/tests/nativeaot/SmokeTests/PInvoke/PInvoke.csproj # src/tests/nativeaot/SmokeTests/Preinitialization/Preinitialization.csproj # src/tests/nativeaot/SmokeTests/SharedLibrary/SharedLibrary.csproj # src/tests/nativeaot/SmokeTests/TrimmingBehaviors/TrimmingBehaviors.csproj # src/tests/nativeaot/nativeaot.csproj # src/tests/run.cmd # src/tests/xunit-wrappers.targets
make jit build delete CreateStackTraceStringForNativeUnwind and CreateStackTraceString
…es. WIP for the object writing Include js files exclude failing tests Remove /sdl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Remove
Microsoft.NET.Workload.Mono.Toolchain.*Manifest-*.nupkgfrom publishing.Revert SDL swtich as it causes problems for LLVM (https://stackoverflow.com/questions/34892732/error-when-call-createphi-in-llvm)