Run the decompiler test suite on Linux#3771
Merged
Merged
Conversation
siegfriedpammer
force-pushed
the
decompiler-tests-on-unix
branch
from
June 11, 2026 20:59
e808c3e to
ec11115
Compare
…AUDE.md Captures the compiler-matrix model, the test kinds and their pipelines, how to add tests per kind, the #if/preprocessor-symbol comparison rules, and the probe-a-construct-across-all-compilers workflow, so this no longer has to be reverse-engineered from the runners. Assisted-by: Claude:claude-fable-5:Claude Code
…ast resort Hosts without a .NET Framework installation (e.g. Linux and macOS) have no GAC; the only system-wide assembly store there is the shared-framework directory of the runtime executing the decompiler, and UniversalAssemblyResolver only consulted it through the version <= 4.0 legacy fallback. This made e.g. the type-forwards of a netstandard facade (pointing to a versioned System.Runtime) unresolvable, which left well-known types like Nullable<T> without a definition and among other things misaligned nullability decoding (Nullable<T> occupies no slot in the nullable metadata, so it must be recognized). On Windows nothing the GAC answered changes; the new fallback only adds resolutions that previously failed outright. Assisted-by: Claude:claude-fable-5:Claude Code
Compilation uses the .NET builds of the Roslyn toolsets (tasks/netcore*,
bincore csc.dll/vbc.dll launched through the dotnet host). ilasm/ildasm
options use the '-' prefix, which all platforms accept. The dotnet-hosted
compilers have no implicit references or SDK path: net40 compiles pass
mscorlib explicitly, and vbc gets -sdkpath, _MYTYPE=Empty and
-vbruntime:Microsoft.VisualBasic.Core.dll (the facade in the ref packs is
not followed for runtime helpers). The TestRunner gets a self-contained
build for the host platform.
Configurations depending on Windows-only tools or runtimes (legacy
csc/vbc, Roslyn 1.x/2.x, mcs, Force32Bit, executing net40 binaries) are
filtered from the matrix off-Windows via Tester.SupportedOnCurrentPlatform
or gated with [Platform("Win")]. PdbGen comparisons normalize document
name separators, and Correctness/Async uses Console.IsInputRedirected
instead of the Windows-only Console.CapsLock.
Assisted-by: Claude:claude-fable-5:Claude Code
siegfriedpammer
force-pushed
the
decompiler-tests-on-unix
branch
from
June 11, 2026 21:07
ec11115 to
bf4233c
Compare
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.
Makes
ICSharpCode.Decompiler.Testsgreen on Linux: 2032 test cases, 1995 passed, 0 failed, 37 deliberate skips (verified on Fedora, .NET 10/11 SDK).What's in here
ICSharpCode.Decompiler.Tests/CLAUDE.md): test kinds, fixture structure, how to add tests, the#if/preprocessor-symbol comparison rules, and the compiler-matrix model.UniversalAssemblyResolvernow searches the shared-framework directory of the executing runtime as a last resort. Hosts without a .NET Framework installation have no GAC, so e.g. the type-forwards of a netstandard facade (pointing to a versionedSystem.Runtime) were unresolvable there — which among other things misaligned nullability decoding (Nullable<T>occupies no slot in the nullable metadata and must be recognized). On Windows, everything the GAC answered before is unchanged.tasks/netcore*,bincore/csc.dll/vbc.dllvia thedotnethost); ilasm/ildasm options use the-prefix accepted on all platforms; net40 compiles passmscorlibexplicitly; vbc gets-sdkpath,_MYTYPE=Emptyand-vbruntime:Microsoft.VisualBasic.Core.dll; the TestRunner gets a self-contained build for the host platform; PdbGen comparisons normalize document-name separators;Correctness/AsyncusesConsole.IsInputRedirectedinstead of the Windows-onlyConsole.CapsLock.What stays Windows-only
Configurations depending on Windows-only tools/runtimes are filtered from the matrix off-Windows (
Tester.SupportedOnCurrentPlatform) or gated with[Platform("Win")]: legacy csc/vbc, Roslyn 1.x/2.x (net472-only packages), mcs,Force32Bit, executing net40 binaries,__arglist(vararg calling convention is Windows-only in CoreCLR), the Framework-ilasm case, the Windows-path-semanticsFileUtilitytests, and the Roundtrip fixture.TargetNet40compilation with Roslyn 3.11+ still runs on Linux. The Windows matrix is unchanged.🤖 Generated with Claude Code