Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
16 changes: 11 additions & 5 deletions src/coreclr/vm/methodtablebuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3872,7 +3872,12 @@ CorElementType MethodTableBuilder::GetCorElementTypeOfTypeDefOrRefForStaticField
Module *pModuleOfTypeDef;
mdTypeDef tkTypeDef;

ClassLoader::ResolveTokenToTypeDefThrowing(module, typeDefOrRef, &pModuleOfTypeDef, &tkTypeDef);
if (!ClassLoader::ResolveTokenToTypeDefThrowing(module, typeDefOrRef, &pModuleOfTypeDef, &tkTypeDef))
{
// Returning ELEMENT_TYPE_VALUETYPE will cause the type to be fully resolved and proper type load exception
// to be 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 +3912,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>