Skip to content

Commit 5f6a7d5

Browse files
committed
chore: fix x86 disassembler error for net462
1 parent 799ecfc commit 5f6a7d5

File tree

1 file changed

+30
-17
lines changed

1 file changed

+30
-17
lines changed

tests/BenchmarkDotNet.IntegrationTests/DisassemblyDiagnoserTests.cs

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,20 @@ public void CanDisassembleAllMethodCalls(Jit jit, Platform platform, Runtime run
9494
{
9595
if (OsDetector.IsMacOS()) return; // currently not supported
9696

97+
var printSource = IsPrintSourceSupported(platform);
9798
var disassemblyDiagnoser = new DisassemblyDiagnoser(
98-
new DisassemblyDiagnoserConfig(printSource: true, maxDepth: 3));
99+
new DisassemblyDiagnoserConfig(printSource: printSource, maxDepth: 3));
99100

100101
CanExecute<WithCalls>(CreateConfig(jit, platform, runtime, disassemblyDiagnoser, RunStrategy.ColdStart));
101102

102-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Benchmark)}(Int32)");
103-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Benchmark)}(Boolean)");
104-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Static)}()");
105-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Instance)}()");
106-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Recursive)}()");
103+
DisassemblyResult result = disassemblyDiagnoser.Results.Single().Value;
104+
105+
Assert.Empty(result.Errors);
106+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Benchmark)}(Int32)");
107+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Benchmark)}(Boolean)");
108+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Static)}()");
109+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Instance)}()");
110+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Recursive)}()");
107111
}
108112

109113
[Theory]
@@ -113,16 +117,20 @@ public void CanDisassembleAllMethodCallsUsingFilters(Jit jit, Platform platform,
113117
{
114118
if (OsDetector.IsMacOS()) return; // currently not supported
115119

120+
var printSource = IsPrintSourceSupported(platform);
116121
var disassemblyDiagnoser = new DisassemblyDiagnoser(
117-
new DisassemblyDiagnoserConfig(printSource: true, maxDepth: 1, filters: new[] { "*WithCalls*" }));
122+
new DisassemblyDiagnoserConfig(printSource: printSource, maxDepth: 1, filters: new[] { "*WithCalls*" }));
118123

119124
CanExecute<WithCalls>(CreateConfig(jit, platform, runtime, disassemblyDiagnoser, RunStrategy.ColdStart));
120125

121-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Benchmark)}(Int32)");
122-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Benchmark)}(Boolean)");
123-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Static)}()");
124-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Instance)}()");
125-
AssertDisassembled(disassemblyDiagnoser, $"{nameof(WithCalls.Recursive)}()");
126+
DisassemblyResult result = disassemblyDiagnoser.Results.Single().Value;
127+
128+
Assert.Empty(result.Errors);
129+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Benchmark)}(Int32)");
130+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Benchmark)}(Boolean)");
131+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Static)}()");
132+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Instance)}()");
133+
AssertDisassemblyResult(result, $"{nameof(WithCalls.Recursive)}()");
126134
}
127135

128136
public class Generic<T> where T : new()
@@ -138,13 +146,15 @@ public void CanDisassembleGenericTypes(Jit jit, Platform platform, Runtime runti
138146
{
139147
if (OsDetector.IsMacOS()) return; // currently not supported
140148

149+
var printSource = IsPrintSourceSupported(platform);
141150
var disassemblyDiagnoser = new DisassemblyDiagnoser(
142-
new DisassemblyDiagnoserConfig(printSource: true, maxDepth: 3));
151+
new DisassemblyDiagnoserConfig(printSource: printSource, maxDepth: 3));
143152

144153
CanExecute<Generic<int>>(CreateConfig(jit, platform, runtime, disassemblyDiagnoser, RunStrategy.Monitoring));
145154

146155
var result = disassemblyDiagnoser.Results.Values.Single();
147156

157+
Assert.Empty(result.Errors);
148158
Assert.Contains(result.Methods, method => method.Maps.Any(map => map.SourceCodes.OfType<Asm>().Any()));
149159
}
150160

@@ -160,13 +170,15 @@ public void CanDisassembleInlinableBenchmarks(Jit jit, Platform platform, Runtim
160170
{
161171
if (OsDetector.IsMacOS()) return; // currently not supported
162172

173+
var printSource = IsPrintSourceSupported(platform);
163174
var disassemblyDiagnoser = new DisassemblyDiagnoser(
164-
new DisassemblyDiagnoserConfig(printSource: true, maxDepth: 3));
175+
new DisassemblyDiagnoserConfig(printSource: printSource, maxDepth: 3));
165176

166177
CanExecute<WithInlineable>(CreateConfig(jit, platform, runtime, disassemblyDiagnoser, RunStrategy.Monitoring));
167178

168179
var disassemblyResult = disassemblyDiagnoser.Results.Values.Single(result => result.Methods.Count(method => method.Name.Contains(nameof(WithInlineable.JustReturn))) == 1);
169180

181+
Assert.Empty(disassemblyResult.Errors);
170182
Assert.Contains(disassemblyResult.Methods, method => method.Maps.Any(map => map.SourceCodes.OfType<Asm>().All(asm => asm.ToString().Contains("ret"))));
171183
}
172184

@@ -181,12 +193,13 @@ private IConfig CreateConfig(Jit jit, Platform platform, Runtime runtime, IDiagn
181193
.AddDiagnoser(disassemblyDiagnoser)
182194
.AddLogger(new OutputLogger(Output));
183195

184-
private void AssertDisassembled(DisassemblyDiagnoser diagnoser, string methodSignature)
196+
private void AssertDisassemblyResult(DisassemblyResult result, string methodSignature)
185197
{
186-
DisassemblyResult result = diagnoser.Results.Single().Value;
187-
188198
Assert.Contains(methodSignature, result.Methods.Select(m => m.Name.Split('.').Last()).ToArray());
189199
Assert.Contains(result.Methods.Single(m => m.Name.EndsWith(methodSignature)).Maps, map => map.SourceCodes.Any());
190200
}
201+
202+
private static bool IsPrintSourceSupported(Platform platform)
203+
=> platform != Platform.X86; // Workaround for https://github.com/dotnet/BenchmarkDotNet/issues/2789
191204
}
192205
}

0 commit comments

Comments
 (0)