anchor.diff:  
   
   /// Build the comparison implementation for a union type when parameterized by a comparer
  -let mkUnionCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (_thatv,thate) compe = 
  +let mkUnionCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (_thatobjv,thatcaste) compe = 
       let m = tycon.Range 
       let ucases = tycon.UnionCasesAsList
       let tinst,ty = mkMinimalTy g tcref
  +    let tcv,tce = mkCompGenLocal m "objTemp" ty    // let tcv = (thatobj :?> ty)
  +    let thataddrvOpt,thataddre = mkThatAddrLocalIfNeeded g m tce ty // let thataddrv = &tcv if struct, otherwise thataddre is just tce
       let thistagv,thistage = mkCompGenLocal m "thisTag" g.int_ty  
       let thattagv,thattage = mkCompGenLocal m "thatTag" g.int_ty  
  -    let thataddrv,thataddre = mkThatAddrLocal g m ty
  -    let tcv,tce = mkCompGenLocal m "objTemp" ty    // let tcv = thate
   
       let expr = 
           let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) 
  
positive.code:         mkCompGenLet m thataddrv (mkValAddr m (mkLocalValRef thatv))  expr
      else
          mkCompGenLet m thataddrv thate expr
  
  let mkDerefThis g m (thisv: Val) thise =
      if isByrefTy g thisv.Type then  mkAddrGet m (mkLocalValRef thisv)
  
negative.code: //------------------------------------------------------------------------- 
  
  let mkThatAddrLocal g m ty = mkCompGenLocal m "obj" (mkThisTy g ty)     
  let mkThatAddrLocalIfNeeded g m tcve ty = 
      if isStructTy g ty then 
          let thataddrv, thataddre = mkCompGenLocal m "obj" (mkThisTy g ty) 
          Some thataddrv, thataddre
      else None,tcve
          
  let mkThisVarThatVar g m ty =
      let thisv,thise = mkThisVar g m ty
  