Summary:
This implementation should suffice for MSVC. _ReadWriteBarrier()
generates no instructions but instructs the compiler not to reorder accesses
around it, and we have to rely on MSVC not currently having any other
optimizations for const members to worry about.
Reviewed By: yfeldblum
Differential Revision:
D5723782
fbshipit-source-id:
a68caa4673a5c410b326c1d2e3c0752bd945f4a6
// so the compiler has to assume that it has been changed inside the block.
__asm__("" : "+r"(in));
return in;
+#elif defined(_WIN32)
+ // MSVC does not currently have optimizations around const members of structs.
+ // _ReadWriteBarrier() will prevent compiler reordering memory accesses.
+ _ReadWriteBarrier();
+ return in;
#else
static_assert(
false, "folly::launder is not implemented for this environment");