From 44e9335137ffd4c0a6ebfe6e0a510267f6476c5a 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 by adding the volatile keyword (which disables memset optimization). Fixes #12207 --- src/vm/object.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vm/object.cpp b/src/vm/object.cpp index 3e3f6d120ac2..4c08f0254ee6 100644 --- a/src/vm/object.cpp +++ b/src/vm/object.cpp @@ -2954,8 +2954,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;