anchor.diff:      | _ -> 
           //printfn "Not eliminating because no Run found"
           None
  +
  +let IsILMethodRefDeclaringTypeSystemString (ilg: ILGlobals) (mref: ILMethodRef) =
  +    mref.DeclaringTypeRef.Scope.IsAssemblyRef &&
  +    mref.DeclaringTypeRef.Scope.AssemblyRef.Name = ilg.typ_String.TypeRef.Scope.AssemblyRef.Name &&
  +    mref.DeclaringTypeRef.BasicQualifiedName = ilg.typ_String.BasicQualifiedName
                   
  -let IsSystemStringConcatOverload (methRef: ILMethodRef) =
  -    methRef.Name = "Concat" && methRef.DeclaringTypeRef.FullName = "System.String" && 
  -    methRef.ReturnType.BasicQualifiedName = "System.String" &&
  -    methRef.ArgTypes |> List.forall(fun ilty -> ilty.BasicQualifiedName = "System.String")
  -
  -let IsSystemStringConcatArray (methRef: ILMethodRef) =
  -    methRef.Name = "Concat" && methRef.DeclaringTypeRef.FullName = "System.String" && 
  -    methRef.ReturnType.BasicQualifiedName = "System.String" &&
  -    methRef.ArgTypes.Length = 1 && methRef.ArgTypes.Head.BasicQualifiedName = "System.String[]"
  +let IsILMethodRefSystemStringConcatOverload (ilg: ILGlobals) (mref: ILMethodRef) =
  +    IsILMethodRefDeclaringTypeSystemString ilg mref &&
  +    mref.Name = "Concat" &&
  +    mref.ReturnType.BasicQualifiedName = ilg.typ_String.BasicQualifiedName &&
  +    mref.ArgCount >= 2 && mref.ArgCount <= 4 && mref.ArgTypes |> List.forall(fun ilty -> ilty.BasicQualifiedName = ilg.typ_String.BasicQualifiedName)
  +
  +let IsILMethodRefSystemStringConcatArray (ilg: ILGlobals) (mref: ILMethodRef) =
  +    IsILMethodRefDeclaringTypeSystemString ilg mref &&
  +    mref.Name = "Concat" &&
  +    mref.ReturnType.BasicQualifiedName = ilg.typ_String.BasicQualifiedName &&
  +    mref.ArgCount = 1 && mref.ArgTypes.Head.BasicQualifiedName = "System.String[]"
       
   //-------------------------------------------------------------------------
   // The traversal
  
positive.code:             mkStaticCall_String_Concat_Array cenv.g m arg
  
      match e with
      | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _) as op, tyargs, args, m) when IsSystemStringConcatOverload methRef || IsSystemStringConcatArray methRef ->
          OptimizeExprOpReductions cenv env (op, tyargs, args, m)
      | _ ->
          OptimizeExpr cenv env e
  
negative.code:     | TOp.ILAsm([], [ty]), _, [a] when typeEquiv cenv.g (tyOfExpr cenv.g a) ty -> OptimizeExpr cenv env a
  
      // Optimize calls when concatenating strings, e.g. "1" + "2" + "3" + "4" .. etc.
      | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ] when IsILMethodRefSystemStringConcatArray cenv.g.ilg mref ->
          MakeOptimizedSystemStringConcatCall cenv env m args
      | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args when IsILMethodRefSystemStringConcatOverload cenv.g.ilg mref ->
          MakeOptimizedSystemStringConcatCall cenv env m args
  
      | _ -> 
  