]> granicus.if.org Git - llvm/commitdiff
[llvm-stress] Ensure that the C++11 random device respects its min/max values (PR32585)
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 26 Jun 2017 10:16:34 +0000 (10:16 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Mon, 26 Jun 2017 10:16:34 +0000 (10:16 +0000)
As noted on PR32585, the change in D29780/rL295325 resulted in calls to Rand32() (values 0 -> 0xFFFFFFFF) but the min()/max() operators indicated it would be (0 -> 0x7FFFF).

This patch changes the random operator to call Rand() instead which does respect the 0 -> 0x7FFFF range and asserts that the value is in range as well.

Differential Revision: https://reviews.llvm.org/D34089

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306281 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-stress/llvm-stress.cpp

index ba1d5739586fc22ba11c127642bfeff3064828c6..6e2b8d305738b60bbff17f4f820944631d4b1cf8 100644 (file)
@@ -116,10 +116,14 @@ public:
 
   /// Make this like a C++11 random device
   typedef uint32_t result_type;
-  uint32_t operator()() { return Rand32(); }
   static constexpr result_type min() { return 0; }
   static constexpr result_type max() { return 0x7ffff; }
-  
+  uint32_t operator()() {
+    uint32_t Val = Rand();
+    assert(Val <= max() && "Random value out of range");
+    return Val;
+  }
+
 private:
   unsigned Seed;
 };