summaryrefslogtreecommitdiff
path: root/tests/src/JIT
diff options
context:
space:
mode:
authorEugene Rozenfeld <erozen@microsoft.com>2018-11-09 16:53:49 -0800
committerEugene Rozenfeld <erozen@microsoft.com>2018-11-13 19:05:42 -0800
commit73f84776b9db118f855672724388cb1def3f2906 (patch)
treec8a543d0b9f2a496934a64290f1a2b4567e8ece4 /tests/src/JIT
parent2e7d443bb9b43b39b59da8d7c66b206a6c1f2ee6 (diff)
downloadcoreclr-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.cs52
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_20499/GitHub_20499.csproj33
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