anchor.diff:                          else
                               // Error will be reported below in CheckOverridesAreAllUsedOnce 
                               ()
  -                        
                       | _ -> 
                           fail(Error(FSComp.SR.typrelOverrideWasAmbiguous(FormatMethInfoSig g amap m denv dispatchSlot),m))
  -            | _ -> fail(Error(FSComp.SR.typrelMoreThenOneOverride(FormatMethInfoSig g amap m denv dispatchSlot),m)))
  -        !res
  +            | _ -> fail(Error(FSComp.SR.typrelMoreThenOneOverride(FormatMethInfoSig g amap m denv dispatchSlot),m))
  +            
  +        res
   
       /// Check all implementations implement some dispatch slot.
       let CheckOverridesAreAllUsedOnce(denv, g, amap, isObjExpr, reqdTy,
  
positive.code: 
          let isReqdTyInterface = isInterfaceTy g reqdTy 
          let showMissingMethodsAndRaiseErrors = (isReqdTyInterface || not isOverallTyAbstract)
          let res = ref true
          let fail exn = (res := false ; if showMissingMethodsAndRaiseErrors then errorR exn)
          
          // Index the availPriorOverrides and overrides by name
          let availPriorOverridesKeyed = availPriorOverrides |> NameMultiMap.initBy (fun ov -> ov.LogicalName)
          let overridesKeyed = overrides |> NameMultiMap.initBy (fun ov -> ov.LogicalName)
          
          dispatchSlots |> List.iter (fun (RequiredSlot(dispatchSlot,isOptional)) -> 
            
              match NameMultiMap.find dispatchSlot.LogicalName overridesKeyed 
                      |> List.filter (OverrideImplementsDispatchSlot g amap m dispatchSlot)  with
              | [ovd] -> 
                  if not ovd.IsCompilerGenerated then 
                      let item = Item.MethodGroup(ovd.LogicalName,[dispatchSlot],None)
                      CallNameResolutionSink sink (ovd.Range,nenv,item,item,dispatchSlot.FormalMethodTyparInst,ItemOccurence.Implemented,denv,AccessorDomain.AccessibleFromSomewhere)
                  sink |> ignore
                  ()
              | [] -> 
                  if not isOptional &&
                     // Check that no available prior override implements this dispatch slot
  
negative.code:                             if moreThanOnePossibleDispatchSlot then
                                  noimpl()
  
                              elif not (listSameLength argTys vargtys) then 
                                  fail(Error(FSComp.SR.typrelMemberDoesNotHaveCorrectNumberOfArguments(FormatOverride denv overrideBy, formatMethodInfoSignature dispatchSlot), overrideBy.Range))
                              elif mtps.Length <> fvmtps.Length then
                                  fail(Error(FSComp.SR.typrelMemberDoesNotHaveCorrectNumberOfTypeParameters(FormatOverride denv overrideBy, formatMethodInfoSignature dispatchSlot), overrideBy.Range))
                              elif not (IsTyparKindMatch compiledSig overrideBy) then
                                  fail(Error(FSComp.SR.typrelMemberDoesNotHaveCorrectKindsOfGenericParameters(FormatOverride denv overrideBy, formatMethodInfoSignature dispatchSlot), overrideBy.Range))
                              else 
                                  fail(Error(FSComp.SR.typrelMemberCannotImplement(FormatOverride denv overrideBy, NicePrint.stringOfMethInfo amap m denv dispatchSlot, formatMethodInfoSignature dispatchSlot), overrideBy.Range))
                          | overrideBy :: _ -> 
                              errorR(Error(FSComp.SR.typrelOverloadNotFound(formatMethodInfoSignature dispatchSlot, formatMethodInfoSignature dispatchSlot),overrideBy.Range))
  
                      | [ overrideBy ] -> 
                          if dispatchSlots |> List.exists (fun (RequiredSlot(dispatchSlot,_)) -> OverrideImplementsDispatchSlot g amap m dispatchSlot overrideBy) then
  