| Index: runtime/vm/class_finalizer.cc | 
| diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc | 
| index 46f3f4dcbaa47b0bc8055b80a7a5b514bda8204f..4af663639458e768d06615a0294f9662ee7ee2f3 100644 | 
| --- a/runtime/vm/class_finalizer.cc | 
| +++ b/runtime/vm/class_finalizer.cc | 
| @@ -248,6 +248,18 @@ void ClassFinalizer::VerifyBootstrapClasses() { | 
| #endif  // defined(DART_NO_SNAPSHOT). | 
|  | 
|  | 
| +static bool IsLoaded(const Type& type) { | 
| +  if (type.HasResolvedTypeClass()) { | 
| +    return true; | 
| +  } | 
| +  const UnresolvedClass& unresolved_class = | 
| +      UnresolvedClass::Handle(type.unresolved_class()); | 
| +  const LibraryPrefix& prefix = | 
| +      LibraryPrefix::Handle(unresolved_class.library_prefix()); | 
| +  return prefix.IsNull() || prefix.is_loaded(); | 
| +} | 
| + | 
| + | 
| // Resolve unresolved_class in the library of cls, or return null. | 
| RawClass* ClassFinalizer::ResolveClass( | 
| const Class& cls, | 
| @@ -275,7 +287,7 @@ void ClassFinalizer::ResolveRedirectingFactory(const Class& cls, | 
| const Function& target = Function::Handle(factory.RedirectionTarget()); | 
| if (target.IsNull()) { | 
| Type& type = Type::Handle(factory.RedirectionType()); | 
| -    if (!type.IsMalformed()) { | 
| +    if (!type.IsMalformed() && IsLoaded(type)) { | 
| const GrowableObjectArray& visited_factories = | 
| GrowableObjectArray::Handle(GrowableObjectArray::New()); | 
| ResolveRedirectingFactoryTarget(cls, factory, visited_factories); | 
| @@ -1498,9 +1510,13 @@ void ClassFinalizer::ResolveAndFinalizeMemberTypes(const Class& cls) { | 
| // The function may be a still unresolved redirecting factory. Do not | 
| // yet try to resolve it in order to avoid cycles in class finalization. | 
| // However, the redirection type should be finalized. | 
| +        // If the redirection type is from a deferred library and is not | 
| +        // yet loaded, do not attempt to resolve. | 
| Type& type = Type::Handle(I, function.RedirectionType()); | 
| -        type ^= FinalizeType(cls, type, kCanonicalize); | 
| -        function.SetRedirectionType(type); | 
| +        if (IsLoaded(type)) { | 
| +          type ^= FinalizeType(cls, type, kCanonicalize); | 
| +          function.SetRedirectionType(type); | 
| +        } | 
| } | 
| } else if (function.IsGetterFunction() || | 
| function.IsImplicitGetterFunction()) { | 
|  |