@@ -53,7 +53,7 @@ module internal Buffer =
5353 let checkDst ( info , cilState : cilState ) =
5454 match info with
5555 | Some ( dstAddress : address) ->
56- let checkSrc ( info , cilState : cilState ) =
56+ let checkSrc info ( cilState : cilState ) =
5757 match info with
5858 | Some ( srcAddress : address) ->
5959 let dstType = lazy dstAddress.TypeOfLocation
@@ -71,28 +71,26 @@ module internal Buffer =
7171 match dstAddress, srcAddress with
7272 | _ when allSafe() ->
7373 let value = cilState.Read ( Ref srcAddress)
74- let cilStates = cilState.Write ( Ref dstAddress) value
75- assert ( List.length cilStates = 1 )
76- List.head cilStates
74+ cilState.Write ( Ref dstAddress) value
7775 | _ when dstSafe.Value ->
7876 let ptr = Types.Cast ( Ref srcAddress) ( dstType.Value.MakePointerType())
7977 let value = cilState.Read ptr
80- let cilStates = cilState.Write ( Ref dstAddress) value
81- assert ( List.length cilStates = 1 )
82- List.head cilStates
78+ cilState.Write ( Ref dstAddress) value
8379 | _ when srcSafe.Value ->
8480 let value = cilState.Read ( Ref srcAddress)
8581 let ptr = Types.Cast ( Ref dstAddress) ( srcType.Value.MakePointerType())
86- let cilStates = cilState.Write ptr value
87- assert ( List.length cilStates = 1 )
88- List.head cilStates
82+ cilState.Write ptr value
8983 | ArrayIndex( dstAddress, dstIndices, dstArrayType), ArrayIndex( srcAddress, srcIndices, srcArrayType) ->
9084 Copy dstAddress dstIndex dstIndices dstArrayType srcAddress srcIndex srcIndices srcArrayType state bytesCount
91- cilState
9285 // TODO: implement unsafe copy
9386 | _ -> internalfail $" CommonMemmove unexpected addresses {srcAddress}, {dstAddress}"
94- | None -> cilState
95- getAddress cilState src |> List.map checkSrc
87+ | None -> ()
88+ let addressesWithStates = getAddress cilState src
89+ let mutable resultCilStates = List.empty
90+ for address, cilState in addressesWithStates do
91+ checkSrc address cilState
92+ resultCilStates <- cilState :: resultCilStates
93+ resultCilStates
9694 | None -> cilState |> List.singleton
9795 getAddress cilState dst |> List.collect checkDst
9896
0 commit comments