Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions src/coreclr/vm/method.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2315,10 +2315,12 @@ bool IsTypeDefOrRefImplementedInSystemModule(Module* pModule, mdToken tk)
mdToken tkTypeDef;
Module* pModuleOfTypeDef;

ClassLoader::ResolveTokenToTypeDefThrowing(pModule, tk, &pModuleOfTypeDef, &tkTypeDef);
if (pModuleOfTypeDef->IsSystem())
if (ClassLoader::ResolveTokenToTypeDefThrowing(pModule, tk, &pModuleOfTypeDef, &tkTypeDef))
{
return true;
if (pModuleOfTypeDef->IsSystem())
{
return true;
}
}
}

Expand Down
15 changes: 10 additions & 5 deletions src/coreclr/vm/methodtablebuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3872,7 +3872,11 @@ CorElementType MethodTableBuilder::GetCorElementTypeOfTypeDefOrRefForStaticField
Module *pModuleOfTypeDef;
mdTypeDef tkTypeDef;

ClassLoader::ResolveTokenToTypeDefThrowing(module, typeDefOrRef, &pModuleOfTypeDef, &tkTypeDef);
if (!ClassLoader::ResolveTokenToTypeDefThrowing(module, typeDefOrRef, &pModuleOfTypeDef, &tkTypeDef))
{
// This will be fully resolved and exception thrown later in MethodTable::DoFullyLoad
return ELEMENT_TYPE_VALUETYPE;
}

// First check to see if the type is byref-like
if (pModuleOfTypeDef->GetCustomAttribute(tkTypeDef,
Expand Down Expand Up @@ -3907,11 +3911,12 @@ CorElementType MethodTableBuilder::GetCorElementTypeOfTypeDefOrRefForStaticField
Module *pModuleOfSystemEnumType;
mdTypeDef tkTypeDefOfSystemEnumType;

ClassLoader::ResolveTokenToTypeDefThrowing(pModuleOfTypeDef, tkTypeDefExtends, &pModuleOfSystemEnumType, &tkTypeDefOfSystemEnumType);

if (pModuleOfSystemEnumType != NULL && pModuleOfSystemEnumType->IsSystem())
if (ClassLoader::ResolveTokenToTypeDefThrowing(pModuleOfTypeDef, tkTypeDefExtends, &pModuleOfSystemEnumType, &tkTypeDefOfSystemEnumType))
{
thisIsAnEnum = true;
if (pModuleOfSystemEnumType != NULL && pModuleOfSystemEnumType->IsSystem())
{
thisIsAnEnum = true;
}
}
}
}
Expand Down
56 changes: 56 additions & 0 deletions src/tests/Regressions/coreclr/GitHub_121791/test121791.il
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

.assembly extern System.Runtime { .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) }
.assembly extern xunit.core {}

.assembly test121791{}

.class public auto ansi test121791
extends [System.Runtime]System.Object
{
.method public hidebysig static int32
Main() cil managed
{
.custom instance void [xunit.core]Xunit.FactAttribute::.ctor() = (
01 00 00 00
)
.entrypoint

.maxstack 1
.try
{
call object test121791::M()
pop
leave.s Failure
}
catch [System.Runtime]System.Object
{
pop
leave.s Success
}

Success:
ldc.i4 100
ret

Failure:
ldc.i4 10
ret
}

.method private hidebysig static object
M() cil managed noinlining
{
.maxstack 8
IL_0000: ldsfld valuetype [System.Runtime]MissingType FieldOfMissingTypeInExistingAssembly::f
IL_0005: box [System.Runtime]MissingType
IL_000a: ret
}
}

.class private auto ansi beforefieldinit FieldOfMissingTypeInExistingAssembly
extends [System.Runtime]System.Object
{
.field public static valuetype [System.Runtime]MissingType f
}
8 changes: 8 additions & 0 deletions src/tests/Regressions/coreclr/GitHub_121791/test121791.ilproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk.IL">
<PropertyGroup>
<CLRTestPriority>1</CLRTestPriority>
</PropertyGroup>
<ItemGroup>
<Compile Include="test121791.il" />
</ItemGroup>
</Project>