anchor.diff:              let writeonly = false
               let shape = ILArrayShape.FromRank args.Length
               let ilInstrReadOnlyAnnotation = if isTyparTy g elemTy && useReadonlyForGenericArrayAddress then ReadonlyAddress else NormalAddress
  -            let isNativePtr = 
  -                match addrExprVal with
  -                | Some vf -> valRefEq g vf g.addrof2_vref
  -                | _ -> false
  -            
               None, mkArrayElemAddress g (readonly, ilInstrReadOnlyAnnotation, isNativePtr, shape, elemTy, (aexpr :: args), m), readonly, writeonly
   
           // LVALUE: "&meth(args)" where meth has a byref or inref return. Includes "&span.[idx]".
  
positive.code: /// have intended effect (i.e. is a readonly pointer and/or a defensive copy).
  let rec mkExprAddrOfExprAux g mustTakeAddress useReadonlyForGenericArrayAddress mut expr addrExprVal m =
      if mustTakeAddress then 
          match expr with 
          // LVALUE of "*x" where "x" is byref is just the byref itself
          | Expr.Op (TOp.LValueOp (LByrefGet, vref), _, [], m) when MustTakeAddressOfByrefGet g vref || CanTakeAddressOfByrefGet g vref mut -> 
  
negative.code: 
          // LVALUE of "e.[n]" where e is an array of structs 
          | Expr.App (Expr.Val (vf, _, _), _, [elemTy], [aexpr;nexpr], _) when (valRefEq g vf g.array_get_vref) -> 
        
              let readonly = false // array address is never forced to be readonly
              let writeonly = false
              let shape = ILArrayShape.SingleDimensional
              let ilInstrReadOnlyAnnotation = if isTyparTy g elemTy && useReadonlyForGenericArrayAddress then ReadonlyAddress else NormalAddress
              None, mkArrayElemAddress g (readonly, ilInstrReadOnlyAnnotation, isNativePtr, shape, elemTy, [aexpr; nexpr], m), readonly, writeonly
  
          // LVALUE of "e.[n1, n2]", "e.[n1, n2, n3]", "e.[n1, n2, n3, n4]" where e is an array of structs 
  