summaryrefslogtreecommitdiff
path: root/tests/src
diff options
context:
space:
mode:
authorEgor Chesakov <Egor.Chesakov@microsoft.com>2019-06-14 20:30:51 -0700
committerGitHub <noreply@github.com>2019-06-14 20:30:51 -0700
commitae2cd207ecf1e14c5e458588f28465b7aab97436 (patch)
tree47cecb5f600dace4a658dd8277638d19f73323d8 /tests/src
parent14a981fd1d92f261870d64435ed50e599747a323 (diff)
downloadcoreclr-ae2cd207ecf1e14c5e458588f28465b7aab97436.tar.gz
coreclr-ae2cd207ecf1e14c5e458588f28465b7aab97436.tar.bz2
coreclr-ae2cd207ecf1e14c5e458588f28465b7aab97436.zip
Don't change LCL_FLD node type when replacing param with its shadow copy (#20900)
Fix an issue that is reproduced when: 1) a method requires GSSecurityCookie (e.g. when allocating unsafe buffer using localloc) and 2) one of the method parameters is "vulnerable" and requires a shadow variable to be created and used instead of the original parameter variable and 3) the method parameter has small signed integer type (i.e. int8 or int16) and 4) the value of the parameter is converted to unsigned type (e.g. uint8 or uint16).
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.il526
-rw-r--r--tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.ilproj24
2 files changed, 550 insertions, 0 deletions
diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.il b/tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.il
new file mode 100644
index 0000000000..02b51fed52
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.il
@@ -0,0 +1,526 @@
+// 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.
+
+.assembly extern System.Runtime { }
+.assembly extern System.Console { }
+.assembly GitHub_20799 { }
+.module GitHub_20799.exe
+
+// GitHub 20799: a bug is reproduced when
+// 1) a method requires GSSecurityCookie (e.g. when allocating unsafe buffer using localloc)
+// 2) one of the method parameters is "vulnerable" and requires a shadow variable to be created
+// and used instead of the original parameter variable
+// 3) the method parameter has small signed integer type (i.e. int8 or int16)
+// 4) the value of the parameter is converted to unsigned type (e.g. uint8 or uint16)
+//
+// For example, these IL patterns are morphed by JIT into a GT_LCL_FLD(uint8, arg1) node
+// * conv.u1(ldfld(ldarga arg1))
+// * conv.u1(ldind.i1(ldarga arg1))
+//
+// In the process of replacement of arg1 with a shadow variable the node type was also changed to TYP_INT and,
+// as a consequence, 'mov dstReg, dword ptr [shadowVarLoc]' was generated for such conversion
+// instead of 'movzx dstReg, byte ptr [shadowVarLoc]'.
+
+.class private sequential ansi sealed beforefieldinit GitHub_20799.SByte
+ extends [System.Runtime]System.ValueType
+{
+ .field public int8 m_value
+}
+
+.class private sequential ansi sealed beforefieldinit GitHub_20799.Int16
+ extends [System.Runtime]System.ValueType
+{
+ .field public int16 m_value
+}
+
+.class private auto ansi beforefieldinit GitHub_20799.Program
+ extends [System.Runtime]System.Object
+{
+ .method private hidebysig static void Use(bool arg1) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ret
+ }
+
+ .method private hidebysig static void Use(int32 arg1) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ret
+ }
+
+ .method private hidebysig static int8 Nop(int8 arg1) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: ret
+ }
+
+ .method private hidebysig static int16 Nop(int16 arg1) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: ret
+ }
+
+ .method private hidebysig static int32
+ Ldfld(int8 arg1, int8 arg2, int8 arg3, int8 arg4, int8 arg5, int8 arg6, int8 arg7, int8 arg8, int8 arg9) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.s arg9
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000e: box [System.Runtime]System.SByte
+ IL_0013: call instance bool [System.Runtime]System.SByte::Equals(object)
+ IL_0018: call void GitHub_20799.Program::Use(bool)
+
+ IL_001d: ldarga.s arg1
+ IL_001f: ldfld int8 GitHub_20799.SByte::m_value
+ IL_0024: conv.u1
+
+ // A shadow copy of arg9 is being used instead
+ IL_0025: ldarga.s arg9
+ IL_0027: ldfld int8 GitHub_20799.SByte::m_value
+ IL_002c: conv.u1
+ IL_002d: beq.s IL_0031
+
+ IL_002f: ldc.i4.1
+ IL_0030: ret
+
+ IL_0031: ldc.i4.s 100
+ IL_0033: ret
+ }
+
+ .method private hidebysig static int32
+ Ldind(int8 arg1, int8 arg2, int8 arg3, int8 arg4, int8 arg5, int8 arg6, int8 arg7, int8 arg8, int8 arg9) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.s arg9
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000e: box [System.Runtime]System.SByte
+ IL_0013: call instance bool [System.Runtime]System.SByte::Equals(object)
+ IL_0018: call void GitHub_20799.Program::Use(bool)
+
+ IL_001d: ldarga.s arg1
+ IL_001f: ldind.i1
+ IL_0020: conv.u1
+
+ // A shadow copy of arg9 is being used instead
+ IL_0021: ldarga.s arg9
+ IL_0023: ldind.i1
+ IL_0024: conv.u1
+ IL_0025: beq.s IL_0029
+
+ IL_0027: ldc.i4.1
+ IL_0028: ret
+
+ IL_0029: ldc.i4.s 100
+ IL_002b: ret
+ }
+
+ .method private hidebysig static int32
+ Starg(int8 arg1, int8 arg2, int8 arg3, int8 arg4, int8 arg5, int8 arg6, int8 arg7, int8 arg8, int8 arg9) cil managed noinlining
+ {
+ .maxstack 8
+
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.s arg9
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000e: box [System.Runtime]System.SByte
+ IL_0013: call instance bool [System.Runtime]System.SByte::Equals(object)
+ IL_0018: call void GitHub_20799.Program::Use(bool)
+
+ IL_001d: ldarg.0
+
+ // This is needed to not "contaminate" arg1 with "vulnerability" of arg9
+ IL_001e: call int8 GitHub_20799.Program::Nop(int8)
+
+ // A shadow copy of arg9 is being used instead
+ IL_0023: starg.s arg9
+ IL_0025: ldarg.0
+ IL_0026: ldarg.s arg9
+ IL_0028: beq.s IL_002c
+
+ IL_002a: ldc.i4.1
+ IL_002b: ret
+
+ IL_002c: ldc.i4.s 100
+ IL_002e: ret
+ }
+
+ .method private hidebysig static int32
+ Stind(int8 arg1, int8 arg2, int8 arg3, int8 arg4, int8 arg5, int8 arg6, int8 arg7, int8 arg8, int8 arg9) cil managed noinlining
+ {
+ .maxstack 8
+
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.s arg9
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000e: box [System.Runtime]System.SByte
+ IL_0013: call instance bool [System.Runtime]System.SByte::Equals(object)
+ IL_0018: call void GitHub_20799.Program::Use(bool)
+
+ // A shadow copy of arg9 is being used instead
+ IL_001d: ldarga.s arg9
+ IL_001f: ldarg.0
+
+ // This is needed to not "contaminate" arg1 with "vulnerability" of arg9
+ IL_0020: call int8 GitHub_20799.Program::Nop(int8)
+ IL_0025: stind.i1
+ IL_0026: ldarg.0
+ IL_0027: ldarg.s arg9
+ IL_0029: beq.s IL_002d
+
+ IL_002b: ldc.i4.1
+ IL_002c: ret
+
+ IL_002d: ldc.i4.s 100
+ IL_002f: ret
+ }
+
+ .method private hidebysig static int32
+ Ldfld(int16 arg1, int16 arg2, int16 arg3, int16 arg4, int16 arg5, int16 arg6, int16 arg7, int16 arg8, int16 arg9) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.0
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000d: box [System.Runtime]System.Int16
+ IL_0012: call instance bool [System.Runtime]System.Int16::Equals(object)
+ IL_0017: call void GitHub_20799.Program::Use(bool)
+
+ IL_001c: ldarga.s arg1
+ IL_001e: ldfld int16 GitHub_20799.Int16::m_value
+ IL_0023: conv.u2
+
+ // A shadow copy of arg9 is being used instead
+ IL_0024: ldarga.s arg9
+ IL_0026: ldfld int16 GitHub_20799.Int16::m_value
+ IL_002b: conv.u2
+ IL_002c: beq.s IL_0030
+
+ IL_002e: ldc.i4.1
+ IL_002f: ret
+
+ IL_0030: ldc.i4.s 100
+ IL_0032: ret
+ }
+
+ .method private hidebysig static int32
+ Ldind(int16 arg1, int16 arg2, int16 arg3, int16 arg4, int16 arg5, int16 arg6, int16 arg7, int16 arg8, int16 arg9) cil managed noinlining
+ {
+ .maxstack 8
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.0
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000d: box [System.Runtime]System.Int16
+ IL_0012: call instance bool [System.Runtime]System.Int16::Equals(object)
+ IL_0017: call void GitHub_20799.Program::Use(bool)
+
+ IL_001c: ldarga.s arg1
+ IL_001e: ldind.i2
+ IL_001f: conv.u2
+
+ // A shadow copy of arg9 is being used instead
+ IL_0020: ldarga.s arg9
+ IL_0022: ldind.i2
+ IL_0023: conv.u2
+ IL_0024: beq.s IL_0028
+
+ IL_0026: ldc.i4.1
+ IL_0027: ret
+
+ IL_0028: ldc.i4.s 100
+ IL_002a: ret
+ }
+
+
+ .method private hidebysig static int32
+ Starg(int16 arg1, int16 arg2, int16 arg3, int16 arg4, int16 arg5, int16 arg6, int16 arg7, int16 arg8, int16 arg9) cil managed noinlining
+ {
+ .maxstack 8
+
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.s arg9
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000e: box [System.Runtime]System.Int16
+ IL_0013: call instance bool [System.Runtime]System.Int16::Equals(object)
+ IL_0018: call void GitHub_20799.Program::Use(bool)
+
+ IL_001d: ldarg.0
+
+ // This is needed to not "contaminate" arg1 with "vulnerability" of arg9
+ IL_001e: call int16 GitHub_20799.Program::Nop(int16)
+
+ // A shadow copy of arg9 is being used instead
+ IL_0023: starg.s arg9
+ IL_0025: ldarg.0
+ IL_0026: ldarg.s arg9
+ IL_0028: beq.s IL_002c
+
+ IL_002a: ldc.i4.1
+ IL_002b: ret
+
+ IL_002c: ldc.i4.s 100
+ IL_002e: ret
+ }
+
+ .method private hidebysig static int32
+ Stind(int16 arg1, int16 arg2, int16 arg3, int16 arg4, int16 arg5, int16 arg6, int16 arg7, int16 arg8, int16 arg9) cil managed noinlining
+ {
+ .maxstack 8
+
+ IL_0000: ldc.i4.4
+ IL_0001: conv.u
+
+ // Unsafe buffer would require GSSecurityCookie
+ IL_0002: localloc
+ IL_0004: ldind.i4
+ IL_0005: call void GitHub_20799.Program::Use(int32)
+ IL_000a: ldarga.s arg9
+ IL_000c: ldarg.s arg9
+
+ // arg9 becomes a "vulnerable" parameter
+ IL_000e: box [System.Runtime]System.Int16
+ IL_0013: call instance bool [System.Runtime]System.Int16::Equals(object)
+ IL_0018: call void GitHub_20799.Program::Use(bool)
+
+ // A shadow copy of arg9 is being used instead
+ IL_001d: ldarga.s arg9
+ IL_001f: ldarg.0
+
+ // This is needed to not "contaminate" arg1 with "vulnerability" of arg9
+ IL_0020: call int16 GitHub_20799.Program::Nop(int16)
+ IL_0025: stind.i2
+ IL_0026: ldarg.0
+ IL_0027: ldarg.s arg9
+ IL_0029: beq.s IL_002d
+
+ IL_002b: ldc.i4.1
+ IL_002c: ret
+
+ IL_002d: ldc.i4.s 100
+ IL_002f: ret
+ }
+
+ .method private hidebysig static int32
+ Main(string[] args) cil managed
+ {
+ .entrypoint
+
+ .maxstack 16
+ .locals init (int32 V_0)
+ IL_0000: ldc.i4.s 100
+ IL_0002: stloc.0
+ IL_0003: ldc.i4.s -127
+ IL_0005: ldc.i4.s -127
+ IL_0007: ldc.i4.s -127
+ IL_0009: ldc.i4.s -127
+ IL_000b: ldc.i4.s -127
+ IL_000d: ldc.i4.s -127
+ IL_000f: ldc.i4.s -127
+ IL_0011: ldc.i4.s -127
+ IL_0013: ldc.i4.s -127
+ IL_0015: call int32 GitHub_20799.Program::Ldfld(int8, int8, int8, int8, int8, int8, int8, int8, int8)
+ IL_001a: ldc.i4.s 100
+ IL_001c: beq.s IL_002a
+
+ IL_001e: ldstr "FAILED: ldfld sbyte"
+ IL_0023: call void [System.Console]System.Console::WriteLine(string)
+ IL_0028: ldc.i4.1
+ IL_0029: stloc.0
+ IL_002a: ldc.i4.s -127
+ IL_002c: ldc.i4.s -127
+ IL_002e: ldc.i4.s -127
+ IL_0030: ldc.i4.s -127
+ IL_0032: ldc.i4.s -127
+ IL_0034: ldc.i4.s -127
+ IL_0036: ldc.i4.s -127
+ IL_0038: ldc.i4.s -127
+ IL_003a: ldc.i4.s -127
+ IL_003c: call int32 GitHub_20799.Program::Ldind(int8, int8, int8, int8, int8, int8, int8, int8, int8)
+ IL_0041: ldc.i4.s 100
+ IL_0043: beq.s IL_0051
+
+ IL_0045: ldstr "FAILED: ldind sbyte"
+ IL_004a: call void [System.Console]System.Console::WriteLine(string)
+ IL_004f: ldc.i4.1
+ IL_0050: stloc.0
+ IL_0051: ldc.i4.s -127
+ IL_0053: ldc.i4.s -127
+ IL_0055: ldc.i4.s -127
+ IL_0057: ldc.i4.s -127
+ IL_0059: ldc.i4.s -127
+ IL_005b: ldc.i4.s -127
+ IL_005d: ldc.i4.s -127
+ IL_005f: ldc.i4.s -127
+ IL_0061: ldc.i4.s -127
+ IL_0063: call int32 GitHub_20799.Program::Starg(int8, int8, int8, int8, int8, int8, int8, int8, int8)
+ IL_0068: ldc.i4.s 100
+ IL_006a: beq.s IL_0078
+
+ IL_006c: ldstr "FAILED: starg sbyte"
+ IL_0071: call void [System.Console]System.Console::WriteLine(string)
+ IL_0076: ldc.i4.1
+ IL_0077: stloc.0
+ IL_0078: ldc.i4.s -127
+ IL_007a: ldc.i4.s -127
+ IL_007c: ldc.i4.s -127
+ IL_007e: ldc.i4.s -127
+ IL_0080: ldc.i4.s -127
+ IL_0082: ldc.i4.s -127
+ IL_0084: ldc.i4.s -127
+ IL_0086: ldc.i4.s -127
+ IL_0088: ldc.i4.s -127
+ IL_008a: call int32 GitHub_20799.Program::Stind(int8, int8, int8, int8, int8, int8, int8, int8, int8)
+ IL_008f: ldc.i4.s 100
+ IL_0091: beq.s IL_009f
+
+ IL_0093: ldstr "FAILED: stind sbyte"
+ IL_0098: call void [System.Console]System.Console::WriteLine(string)
+ IL_009d: ldc.i4.1
+ IL_009e: stloc.0
+ IL_009f: ldc.i4 -20799
+ IL_00a4: ldc.i4 -20799
+ IL_00a9: ldc.i4 -20799
+ IL_00ae: ldc.i4 -20799
+ IL_00b3: ldc.i4 -20799
+ IL_00b8: ldc.i4 -20799
+ IL_00bd: ldc.i4 -20799
+ IL_00c2: ldc.i4 -20799
+ IL_00c7: ldc.i4 -20799
+ IL_00cc: call int32 GitHub_20799.Program::Ldfld(int16, int16, int16, int16, int16, int16, int16, int16, int16)
+ IL_00d1: ldc.i4.s 100
+ IL_00d3: beq.s IL_00e1
+
+ IL_00d5: ldstr "FAILED: ldfld short"
+ IL_00da: call void [System.Console]System.Console::WriteLine(string)
+ IL_00df: ldc.i4.1
+ IL_00e0: stloc.0
+ IL_00e1: ldc.i4 -20799
+ IL_00e6: ldc.i4 -20799
+ IL_00eb: ldc.i4 -20799
+ IL_00f0: ldc.i4 -20799
+ IL_00f5: ldc.i4 -20799
+ IL_00fa: ldc.i4 -20799
+ IL_00ff: ldc.i4 -20799
+ IL_0104: ldc.i4 -20799
+ IL_0109: ldc.i4 -20799
+ IL_010e: call int32 GitHub_20799.Program::Ldind(int16, int16, int16, int16, int16, int16, int16, int16, int16)
+ IL_0113: ldc.i4.s 100
+ IL_0115: beq.s IL_0123
+
+ IL_0117: ldstr "FAILED: ldind short"
+ IL_011c: call void [System.Console]System.Console::WriteLine(string)
+ IL_0121: ldc.i4.1
+ IL_0122: stloc.0
+ IL_0123: ldc.i4 -20799
+ IL_0128: ldc.i4 -20799
+ IL_012d: ldc.i4 -20799
+ IL_0132: ldc.i4 -20799
+ IL_0137: ldc.i4 -20799
+ IL_013c: ldc.i4 -20799
+ IL_0141: ldc.i4 -20799
+ IL_0146: ldc.i4 -20799
+ IL_014b: ldc.i4 -20799
+ IL_0150: call int32 GitHub_20799.Program::Starg(int16, int16, int16, int16, int16, int16, int16, int16, int16)
+ IL_0155: ldc.i4.s 100
+ IL_0157: beq.s IL_0165
+
+ IL_0159: ldstr "FAILED: starg short"
+ IL_015e: call void [System.Console]System.Console::WriteLine(string)
+ IL_0163: ldc.i4.1
+ IL_0164: stloc.0
+ IL_0165: ldc.i4 -20799
+ IL_016a: ldc.i4 -20799
+ IL_016f: ldc.i4 -20799
+ IL_0174: ldc.i4 -20799
+ IL_0179: ldc.i4 -20799
+ IL_017e: ldc.i4 -20799
+ IL_0183: ldc.i4 -20799
+ IL_0188: ldc.i4 -20799
+ IL_018d: ldc.i4 -20799
+ IL_0192: call int32 GitHub_20799.Program::Stind(int16, int16, int16, int16, int16, int16, int16, int16, int16)
+ IL_0197: ldc.i4.s 100
+ IL_0199: beq.s IL_01a7
+
+ IL_019b: ldstr "FAILED: stind short"
+ IL_01a0: call void [System.Console]System.Console::WriteLine(string)
+ IL_01a5: ldc.i4.1
+ IL_01a6: stloc.0
+ IL_01a7: ldloc.0
+ IL_01a8: ldc.i4.s 100
+ IL_01aa: bne.un.s IL_01b6
+
+ IL_01ac: ldstr "PASS"
+ IL_01b1: call void [System.Console]System.Console::WriteLine(string)
+ IL_01b6: ldloc.0
+ IL_01b7: ret
+ }
+
+ .method public hidebysig specialname rtspecialname
+ instance void .ctor() cil managed
+ {
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: call instance void [System.Runtime]System.Object::.ctor()
+ IL_0006: ret
+ }
+}
diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.ilproj b/tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.ilproj
new file mode 100644
index 0000000000..9c29cd8d1e
--- /dev/null
+++ b/tests/src/JIT/Regression/JitBlue/GitHub_20799/GitHub_20799.ilproj
@@ -0,0 +1,24 @@
+<?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>
+ <AssemblyName>$(MSBuildProjectName)</AssemblyName>
+ <ProjectGuid>{95DFC527-4DC1-495E-97D7-E94EE1F7140D}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "></PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "></PropertyGroup>
+ <PropertyGroup>
+ <DebugType>None</DebugType>
+ <Optimize>True</Optimize>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="GitHub_20799.il" />
+ </ItemGroup>
+ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.targets))\dir.targets" />
+ <PropertyGroup Condition=" '$(MsBuildProjectDirOverride)' != '' ">
+ </PropertyGroup>
+</Project>