diff options
author | Eugene Rozenfeld <erozen@microsoft.com> | 2018-11-09 16:53:49 -0800 |
---|---|---|
committer | Eugene Rozenfeld <erozen@microsoft.com> | 2018-11-13 19:05:42 -0800 |
commit | 73f84776b9db118f855672724388cb1def3f2906 (patch) | |
tree | c8a543d0b9f2a496934a64290f1a2b4567e8ece4 /tests/src/JIT | |
parent | 2e7d443bb9b43b39b59da8d7c66b206a6c1f2ee6 (diff) | |
download | coreclr-73f84776b9db118f855672724388cb1def3f2906.tar.gz coreclr-73f84776b9db118f855672724388cb1def3f2906.tar.bz2 coreclr-73f84776b9db118f855672724388cb1def3f2906.zip |
Fix for bug 20499.
When the jit is copying a struct-typed return to the return local in a synchronous method on arm64,
it ends up invoking an importer utility outside the importer, where impTreeLast is not set.
The call sequence is
fgMorphBlocks --> gtNewTempAssign --> impAssignStruct --> impAssignStructPtr --> impAppendTree
When impAssignStructPtr sees GT_COMMA src nodes, it unwraps them and inserts additional statements.
The fix is to pass an insertion point statement through this call chain to prevent impAssignStruct
and impAssignStructPtr from calling impAppendTree outside of the importer.
Diffstat (limited to 'tests/src/JIT')
-rw-r--r-- | tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.cs | 52 | ||||
-rw-r--r-- | tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.csproj | 33 |
2 files changed, 85 insertions, 0 deletions
diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.cs b/tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.cs new file mode 100644 index 0000000000..6548c36c5b --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.cs @@ -0,0 +1,52 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Runtime.CompilerServices; + +struct S +{ + public long y; + public int x; +} + +class Z +{ + virtual public S F() + { + S s = new S(); + s.x = 100; + s.y = -1; + return s; + } + +} + +class X +{ + Z z; + + [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.Synchronized)] + public S G() => z.F(); + + public static int Main() + { + int result = Test(); + if (result == 100) { + Console.WriteLine("SUCCESS"); + } + else { + Console.WriteLine("FAILURE"); + } + return result; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static int Test() + { + var x = new X(); + x.z = new Z(); + return x.G().x; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.csproj new file mode 100644 index 0000000000..42f8a01f39 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.csproj @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{2649FAFE-07BF-4F93-8120-BA9A69285ABB}</ProjectGuid> + <OutputType>Exe</OutputType> + <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir> + </PropertyGroup> + <!-- Default configurations to help VS understand the configurations --> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "></PropertyGroup> + <PropertyGroup> + <DebugType>None</DebugType> + <Optimize>True</Optimize> + </PropertyGroup> + <ItemGroup> + <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> + <Visible>False</Visible> + </CodeAnalysisDependentAssemblyPaths> + </ItemGroup> + <ItemGroup> + <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" /> + </ItemGroup> + <ItemGroup> + <Compile Include="$(MSBuildProjectName).cs" /> + </ItemGroup> + <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" /> + <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' "></PropertyGroup> +</Project>
\ No newline at end of file |