Apparently, shifts greater than or equal to the width of the type
are undefined, and can surprisingly produce a non-zero value.
Amit Kapila, with a comment by me.
/* Create new segment or open an existing one for attach. */
if (op == DSM_OP_CREATE)
{
- DWORD size_high = (DWORD) (request_size >> 32);
- DWORD size_low = (DWORD) request_size;
+ DWORD size_high;
+ DWORD size_low;
+
+ /* Shifts >= the width of the type are undefined. */
+#ifdef _WIN64
+ size_high = request_size >> 32;
+#else
+ size_high = 0;
+#endif
+ size_low = (DWORD) request_size;
+
hmap = CreateFileMapping(INVALID_HANDLE_VALUE, /* Use the pagefile */
NULL, /* Default security attrs */
PAGE_READWRITE, /* Memory is read/write */