From 2b087c9440a93691429b26c9bb1928594a4b0425 Mon Sep 17 00:00:00 2001 From: Daniel Podder Date: Fri, 7 Jul 2017 23:53:38 -0700 Subject: [PATCH] Ensure that ZeroMemoryInGCHeap writes in pointer-sized increments (dotnet/coreclr#12689) by adding the volatile keyword (which disables memset optimization). Fixes dotnet/coreclr#12207 Commit migrated from https://github.com/dotnet/coreclr/commit/c28b3c9f928ba0ff1be6727dcbdb9ba8d1522a82 --- src/coreclr/src/vm/object.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/coreclr/src/vm/object.cpp b/src/coreclr/src/vm/object.cpp index cf7d775..b8965cb 100644 --- a/src/coreclr/src/vm/object.cpp +++ b/src/coreclr/src/vm/object.cpp @@ -2978,8 +2978,9 @@ void __fastcall ZeroMemoryInGCHeap(void* mem, size_t size) *memBytes++ = 0; // now write pointer sized pieces + // volatile ensures that this doesn't get optimized back into a memset call (see #12207) size_t nPtrs = (endBytes - memBytes) / sizeof(PTR_PTR_VOID); - PTR_PTR_VOID memPtr = (PTR_PTR_VOID) memBytes; + volatile PTR_PTR_VOID memPtr = (PTR_PTR_VOID) memBytes; for (size_t i = 0; i < nPtrs; i++) *memPtr++ = 0; -- 2.7.4