未验证 提交 c75659b3 编写于 作者: M Michal Strehovský 提交者: GitHub

Avoid crashing on unresolved dependencies (#70871)

Fixes #70815.
上级 07b57418
......@@ -201,8 +201,11 @@ private void WalkMethod(EcmaMethod method)
&& _metadataReader.GetMemberReference((MemberReferenceHandle)accessedMethod).Parent.Kind == HandleKind.TypeSpecification))
{
var m = methodIL.GetObject(MetadataTokens.GetToken(accessedMethod), NotFoundBehavior.ReturnNull) as MethodDesc;
ProcessTypeReference(m.OwningType, typeContext, methodContext);
ProcessMethodCall(m, typeContext, methodContext);
if (m != null)
{
ProcessTypeReference(m.OwningType, typeContext, methodContext);
ProcessMethodCall(m, typeContext, methodContext);
}
}
break;
......
......@@ -683,13 +683,21 @@ private void GetFlowDependenciesForInstantiation(ref DependencyList dependencies
var genericParameter = (GenericParameterDesc)typicalInstantiation[i];
if (FlowAnnotations.GetGenericParameterAnnotation(genericParameter) != default)
{
var deps = ILCompiler.Dataflow.ReflectionMethodBodyScanner.ProcessGenericArgumentDataFlow(factory, FlowAnnotations, Logger, genericParameter, instantiation[i], source);
if (deps.Count > 0)
try
{
if (dependencies == null)
dependencies = deps;
else
dependencies.AddRange(deps);
var deps = ILCompiler.Dataflow.ReflectionMethodBodyScanner.ProcessGenericArgumentDataFlow(factory, FlowAnnotations, Logger, genericParameter, instantiation[i], source);
if (deps.Count > 0)
{
if (dependencies == null)
dependencies = deps;
else
dependencies.AddRange(deps);
}
}
catch (TypeSystemException)
{
// Wasn't able to do dataflow because of missing references or something like that.
// This likely won't compile either, so we don't care about missing dependencies.
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册