-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add a repro test. * Forbid the transformation for byrefs. * Update src/coreclr/src/jit/morph.cpp Co-authored-by: Andy Ayers <andya@microsoft.com> * Update src/coreclr/src/jit/morph.cpp * Fix the test return value. WriteLine is just to make sure we don't delete the value. * improve the test. avoid a possible overflow and don't waste time on printing. Co-authored-by: Andy Ayers <andya@microsoft.com>
- Loading branch information
1 parent
667e71d
commit 5ed389b
Showing
3 changed files
with
76 additions
and
2 deletions.
There are no files selected for viewing
This file contains 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
63 changes: 63 additions & 0 deletions
63
src/tests/JIT/Regression/JitBlue/Runtime_44266/Runtime_44266.il
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// Licensed to the .NET Foundation under one or more agreements. | ||
// The .NET Foundation licenses this file to you under the MIT license. | ||
|
||
// This test shows an inlining of `byref LCL_VAR_ADDR - byref CNST_INT` method that returns a native int. | ||
// However, Jit could try to optimize `-` as `+ -CNST_INT` that could lead to an incorrect `long + (-byref)`. | ||
|
||
.assembly extern System.Console {} | ||
.assembly extern legacy library mscorlib {} | ||
.assembly byrefsubbyref1 { } | ||
.class a extends [mscorlib]System.Object | ||
{ | ||
.field static class ctest S_1 | ||
.method public static native int byrefsubbyref(class ctest& V_1, class ctest& V_2) aggressiveinlining | ||
{ | ||
ldarg 0 | ||
ldarg 1 | ||
sub | ||
ret | ||
} | ||
|
||
.method public static int32 main() cil managed | ||
{ | ||
.entrypoint | ||
.maxstack 2 | ||
.locals init (class ctest V_1, | ||
class ctest V_2, | ||
native int V_3) | ||
newobj instance void ctest::.ctor() | ||
stloc.0 | ||
newobj instance void ctest::.ctor() | ||
dup | ||
stsfld class ctest a::S_1 | ||
stloc.1 | ||
|
||
ldloca V_1 | ||
ldsflda class ctest a::S_1 | ||
call native int a::byrefsubbyref(class ctest&, class ctest&) | ||
stloc V_3 | ||
ldloc V_3 | ||
call void a::KeepA(native int) | ||
ldc.i4.s 100 | ||
ret | ||
} | ||
|
||
.method public hidebysig static void KeepA(native int a) cil managed noinlining | ||
{ | ||
.maxstack 8 | ||
ret | ||
} | ||
} | ||
|
||
.class private auto ansi ctest | ||
extends [mscorlib]System.Object | ||
{ | ||
.method public specialname rtspecialname | ||
instance void .ctor() cil managed | ||
{ | ||
.maxstack 1 | ||
ldarg.0 | ||
call instance void [mscorlib]System.Object::.ctor() | ||
ret | ||
} | ||
} |
10 changes: 10 additions & 0 deletions
10
src/tests/JIT/Regression/JitBlue/Runtime_44266/Runtime_44266.ilproj
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<Project Sdk="Microsoft.NET.Sdk.IL"> | ||
<PropertyGroup> | ||
<OutputType>Exe</OutputType> | ||
<DebugType>None</DebugType> | ||
<Optimize>True</Optimize> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
<Compile Include="$(MSBuildProjectName).il" /> | ||
</ItemGroup> | ||
</Project> |