| Index: runtime/vm/class_finalizer.cc | 
| =================================================================== | 
| --- runtime/vm/class_finalizer.cc	(revision 44955) | 
| +++ runtime/vm/class_finalizer.cc	(working copy) | 
| @@ -510,6 +510,10 @@ | 
| void ClassFinalizer::FinalizeTypeParameters( | 
| const Class& cls, | 
| GrowableObjectArray* pending_types) { | 
| +  if (FLAG_trace_type_finalization) { | 
| +    OS::Print("Finalizing type parameters of '%s'\n", | 
| +              String::Handle(cls.Name()).ToCString()); | 
| +  } | 
| if (cls.IsMixinApplication()) { | 
| // Setup the type parameters of the mixin application and finalize the | 
| // mixin type. | 
| @@ -817,6 +821,15 @@ | 
| if (error.IsNull() && | 
| !(type_arg.Equals(type_param) && | 
| instantiated_bound.Equals(declared_bound))) { | 
| +        // If type_arg is a type parameter, its declared bound may not be | 
| +        // resolved yet. | 
| +        if (type_arg.IsTypeParameter()) { | 
| +          const Class& type_arg_cls = Class::Handle( | 
| +              TypeParameter::Cast(type_arg).parameterized_class()); | 
| +          const AbstractType& bound = AbstractType::Handle( | 
| +              TypeParameter::Cast(type_arg).bound()); | 
| +          ResolveType(type_arg_cls, bound); | 
| +        } | 
| if (!type_param.CheckBound(type_arg, instantiated_bound, &error) && | 
| error.IsNull()) { | 
| // The bound cannot be checked at compile time; postpone to run time. | 
|  |