Fix a couple of bugs in linear_congruential_engine::seed.  Regression test added.

llvm-svn: 182421
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 849821cffb2fe404593450b7b067bee8704bcb4d
diff --git a/include/random b/include/random
index 92722ea..f1076f9 100644
--- a/include/random
+++ b/include/random
@@ -1835,7 +1835,7 @@
     // types
     typedef _UIntType result_type;
 
-private:
+//private:
     result_type __x_;
 
     static _LIBCPP_CONSTEXPR const result_type _Mp = result_type(~0);
@@ -1880,7 +1880,7 @@
         seed(_Sseq& __q)
             {__seed(__q, integral_constant<unsigned,
                 1 + (__m == 0 ? (sizeof(result_type) * __CHAR_BIT__ - 1)/32
-                             :  (__m-1) / 0x100000000ull)>());}
+                             :  (__m > 0x100000000ull))>());}
 
     // generating functions
     _LIBCPP_INLINE_VISIBILITY
@@ -1969,7 +1969,7 @@
     uint32_t __ar[__k+3];
     __q.generate(__ar, __ar + __k + 3);
     result_type __s = static_cast<result_type>((__ar[3] +
-                                                (uint64_t)__ar[4] << 32) % __m);
+                                              ((uint64_t)__ar[4] << 32)) % __m);
     __x_ = __c == 0 && __s == 0 ? result_type(1) : __s;
 }