Skip to content

Commit

Permalink
Add test configuration for mcs 5.23.0
Browse files Browse the repository at this point in the history
  • Loading branch information
siegfriedpammer committed Nov 17, 2021
1 parent 77ceb15 commit 7b3940a
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 18 deletions.
16 changes: 9 additions & 7 deletions ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,10 @@ public void AllFilesHaveTests()
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
CompilerOptions.UseMcs,
CompilerOptions.Optimize | CompilerOptions.UseMcs
CompilerOptions.UseMcs2_6_4,
CompilerOptions.Optimize | CompilerOptions.UseMcs2_6_4,
CompilerOptions.UseMcs5_23,
CompilerOptions.Optimize | CompilerOptions.UseMcs5_23
};

static readonly CompilerOptions[] roslynOnlyOptions =
Expand Down Expand Up @@ -286,7 +288,7 @@ public void StackTypes([Values(false, true)] bool force32Bit)
[Test]
public void UnsafeCode([ValueSource(nameof(defaultOptions))] CompilerOptions options)
{
if (options.HasFlag(CompilerOptions.UseMcs))
if (options.HasFlag(CompilerOptions.UseMcs2_6_4))
{
Assert.Ignore("Decompiler bug with mono!");
}
Expand Down Expand Up @@ -314,7 +316,7 @@ public void Capturing([ValueSource(nameof(defaultOptions))] CompilerOptions opti
[Test]
public void YieldReturn([ValueSource(nameof(defaultOptions))] CompilerOptions options)
{
if (options.HasFlag(CompilerOptions.UseMcs))
if ((options & CompilerOptions.UseMcsMask) != 0)
{
Assert.Ignore("Decompiler bug with mono!");
}
Expand Down Expand Up @@ -348,7 +350,7 @@ public void DynamicTests([ValueSource(nameof(noMonoOptions))] CompilerOptions op
[Test]
public void MiniJSON([ValueSource(nameof(defaultOptions))] CompilerOptions options)
{
if (options.HasFlag(CompilerOptions.UseMcs))
if (options.HasFlag(CompilerOptions.UseMcs2_6_4))
{
Assert.Ignore("Decompiler bug with mono!");
}
Expand All @@ -366,12 +368,12 @@ void RunCS([CallerMemberName] string testName = null, CompilerOptions options =
outputFile = Tester.CompileCSharp(Path.Combine(TestCasePath, testFileName), options,
outputFileName: Path.Combine(TestCasePath, testOutputFileName));
string decompiledCodeFile = Tester.DecompileCSharp(outputFile.PathToAssembly, Tester.GetSettings(options));
if (options.HasFlag(CompilerOptions.UseMcs))
if ((options & CompilerOptions.UseMcsMask) != 0)
{
// For second pass, use roslyn instead of mcs.
// mcs has some compiler bugs that cause it to not accept ILSpy-generated code,
// for example when there's unreachable code due to other compiler bugs in the first mcs run.
options &= ~CompilerOptions.UseMcs;
options &= ~CompilerOptions.UseMcsMask;
options |= CompilerOptions.UseRoslynLatest;
// Also, add an .exe.config so that we consistently use the .NET 4.x runtime.
File.WriteAllText(outputFile.PathToAssembly + ".config", @"<?xml version=""1.0"" encoding=""utf-8""?>
Expand Down
2 changes: 1 addition & 1 deletion ICSharpCode.Decompiler.Tests/Helpers/Tester.VB.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static CompilerResults CompileVB(string sourceFileName, CompilerOptions f

var preprocessorSymbols = GetPreprocessorSymbols(flags).Select(symbol => new KeyValuePair<string, object>(symbol, 1)).ToList();

if (!flags.HasFlag(CompilerOptions.UseMcs))
if ((flags & CompilerOptions.UseMcsMask) == 0)
{
CompilerResults results = new CompilerResults(new TempFileCollection());
results.PathToAssembly = outputFileName ?? Path.GetTempFileName();
Expand Down
21 changes: 14 additions & 7 deletions ICSharpCode.Decompiler.Tests/Helpers/Tester.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,16 @@ public enum CompilerOptions
Force32Bit = 0x4,
Library = 0x8,
UseRoslyn1_3_2 = 0x10,
UseMcs = 0x20,
UseMcs2_6_4 = 0x20,
ReferenceVisualBasic = 0x40,
ReferenceCore = 0x80,
GeneratePdb = 0x100,
Preview = 0x200,
UseRoslyn2_10_0 = 0x400,
UseRoslyn3_11_0 = 0x800,
UseRoslynLatest = 0x1000,
UseMcs5_23 = 0x2000,
UseMcsMask = UseMcs2_6_4 | UseMcs5_23,
UseRoslynMask = UseRoslyn1_3_2 | UseRoslyn2_10_0 | UseRoslyn3_11_0 | UseRoslynLatest
}

Expand Down Expand Up @@ -335,7 +337,7 @@ public static List<string> GetPreprocessorSymbols(CompilerOptions flags)
}
}
}
else if (flags.HasFlag(CompilerOptions.UseMcs))
else if ((flags & CompilerOptions.UseMcsMask) != 0)
{
preprocessorSymbols.Add("MCS");
}
Expand All @@ -361,7 +363,7 @@ public static CompilerResults CompileCSharp(string sourceFileName, CompilerOptio

var preprocessorSymbols = GetPreprocessorSymbols(flags);

if (!flags.HasFlag(CompilerOptions.UseMcs))
if ((flags & CompilerOptions.UseMcsMask) == 0)
{
CompilerResults results = new CompilerResults(new TempFileCollection());
results.PathToAssembly = outputFileName ?? Path.GetTempFileName();
Expand Down Expand Up @@ -476,7 +478,10 @@ public static CompilerResults CompileCSharp(string sourceFileName, CompilerOptio
Assert.Ignore($"Compilation with mcs ignored: test directory '{testBasePath}' needs to be checked out separately." + Environment.NewLine +
$"git clone https://github.com/icsharpcode/ILSpy-tests \"{testBasePath}\"");
}
string mcsPath = Path.Combine(testBasePath, @"mcs\2.6.4\bin\gmcs.bat");
string mcsPath = (flags & CompilerOptions.UseMcsMask) switch {
CompilerOptions.UseMcs5_23 => Path.Combine(testBasePath, @"mcs\5.23\bin\mcs.bat"),
_ => Path.Combine(testBasePath, @"mcs\2.6.4\bin\gmcs.bat")
};
string otherOptions = " -unsafe -o" + (flags.HasFlag(CompilerOptions.Optimize) ? "+ " : "- ");

if (flags.HasFlag(CompilerOptions.Library))
Expand Down Expand Up @@ -544,7 +549,7 @@ internal static DecompilerSettings GetSettings(CompilerOptions cscOptions)
else
{
var settings = new DecompilerSettings(CSharp.LanguageVersion.CSharp5);
if (cscOptions.HasFlag(CompilerOptions.UseMcs))
if ((cscOptions & CompilerOptions.UseMcsMask) != 0)
{
// we don't recompile with mcs but with roslyn, so we can use ref locals
settings.UseRefLocalsForAccurateOrderOfEvaluation = true;
Expand Down Expand Up @@ -609,8 +614,10 @@ internal static string GetSuffix(CompilerOptions cscOptions)
suffix += ".roslyn3";
if ((cscOptions & CompilerOptions.UseRoslynLatest) != 0)
suffix += ".roslyn";
if ((cscOptions & CompilerOptions.UseMcs) != 0)
suffix += ".mcs";
if ((cscOptions & CompilerOptions.UseMcs2_6_4) != 0)
suffix += ".mcs2";
if ((cscOptions & CompilerOptions.UseMcs5_23) != 0)
suffix += ".mcs5";
return suffix;
}

Expand Down
6 changes: 4 additions & 2 deletions ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,10 @@ public void AllFilesHaveTests()
CompilerOptions.Optimize | CompilerOptions.UseRoslyn3_11_0,
CompilerOptions.UseRoslynLatest,
CompilerOptions.Optimize | CompilerOptions.UseRoslynLatest,
CompilerOptions.UseMcs,
CompilerOptions.Optimize | CompilerOptions.UseMcs
CompilerOptions.UseMcs2_6_4,
CompilerOptions.Optimize | CompilerOptions.UseMcs2_6_4,
CompilerOptions.UseMcs5_23,
CompilerOptions.Optimize | CompilerOptions.UseMcs5_23
};

[Test]
Expand Down

0 comments on commit 7b3940a

Please sign in to comment.