X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FSupport%2FRandomNumberGenerator.cpp;h=c50e7cb8fbe533b2aa480e5d2cbeeca588f68f2b;hb=82acfbfe86e798e260738f0b25e6b61117f35541;hp=5513982e7b13b9904ec1a15d5041370184776eda;hpb=1d04a2324c4e86320b5452f5262782c569cd3315;p=oota-llvm.git diff --git a/lib/Support/RandomNumberGenerator.cpp b/lib/Support/RandomNumberGenerator.cpp index 5513982e7b1..c50e7cb8fbe 100644 --- a/lib/Support/RandomNumberGenerator.cpp +++ b/lib/Support/RandomNumberGenerator.cpp @@ -36,13 +36,22 @@ RandomNumberGenerator::RandomNumberGenerator(StringRef Salt) { // Combine seed and salt using std::seed_seq. // Entropy: Seed-low, Seed-high, Salt... - size_t Size = Salt.size() + 2; - uint32_t Data[Size]; - Data[0] = Seed; - Data[1] = Seed >> 32; - std::copy_n(Salt.begin(), Salt.size(), Data + 2); + std::vector Data; + Data.reserve(2 + Salt.size()/4 + 1); + Data.push_back(Seed); + Data.push_back(Seed >> 32); - std::seed_seq SeedSeq(Data, Data + Size); + uint32_t Pack = 0; + for (size_t I = 0; I < Salt.size(); ++I) { + Pack <<= 8; + Pack += Salt[I]; + + if (I%4 == 3) + Data.push_back(Pack); + } + Data.push_back(Pack); + + std::seed_seq SeedSeq(Data.begin(), Data.end()); Generator.seed(SeedSeq); }