[llvm] r200767 - Implemented support for Process::GetRandomNumber on Windows.

Aaron Ballman aaron at aaronballman.com
Mon Feb 10 17:52:11 PST 2014


It appears there is no rand_s() implementation for MinGW 32, so the
question becomes whether we back this change out, or fall back on
rand(). Unfortunately, r185126 is relying on this, and I'm loathe to
start backing out other people's work because of this. So instead, I
will gin up a replacement for MinGW 32 and hopefully Stephan can
either come up with a better fix, or mine will be sufficient for the
task.

~Aaron

On Mon, Feb 10, 2014 at 2:15 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
> Thank you for pointing this out, Galina and sorry for the difficulties!
>
> Stephan, would you be able to look into this?
>
> ~Aaron
>
> On Mon, Feb 10, 2014 at 2:05 PM, Galina Kistanova <gkistanova at gmail.com> wrote:
>> Hi Aaron,
>>
>> Seems this revision broke clang-native-mingw32-win7 builder:
>> http://lab.llvm.org:8011/builders/clang-native-mingw32-win7/builds/5557
>>
>> The last successful build was for revision 200765:
>> http://lab.llvm.org:8011/builders/clang-native-mingw32-win7/builds/5578
>> Please have a look at it.
>>
>> Thanks
>>
>> Galina
>>
>>
>>
>> On Tue, Feb 4, 2014 at 6:49 AM, Aaron Ballman <aaron at aaronballman.com>
>> wrote:
>>>
>>> Author: aaronballman
>>> Date: Tue Feb  4 08:49:21 2014
>>> New Revision: 200767
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=200767&view=rev
>>> Log:
>>> Implemented support for Process::GetRandomNumber on Windows.
>>>
>>> Patch thanks to Stephan Tolksdorf!
>>>
>>> Modified:
>>>     llvm/trunk/lib/Support/Process.cpp
>>>     llvm/trunk/lib/Support/Windows/Process.inc
>>>     llvm/trunk/unittests/Support/ProcessTest.cpp
>>>
>>> Modified: llvm/trunk/lib/Support/Process.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Process.cpp?rev=200767&r1=200766&r2=200767&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Support/Process.cpp (original)
>>> +++ llvm/trunk/lib/Support/Process.cpp Tue Feb  4 08:49:21 2014
>>> @@ -12,6 +12,11 @@
>>>
>>> //===----------------------------------------------------------------------===//
>>>
>>>  #include "llvm/Config/config.h"
>>> +#if LLVM_ON_WIN32
>>> +  // This define makes stdlib.h declare the rand_s function.
>>> +#define _CRT_RAND_S
>>> +#include <stdlib.h>
>>> +#endif
>>>  #include "llvm/Support/ErrorHandling.h"
>>>  #include "llvm/Support/Process.h"
>>>
>>>
>>> Modified: llvm/trunk/lib/Support/Windows/Process.inc
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Process.inc?rev=200767&r1=200766&r2=200767&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Support/Windows/Process.inc (original)
>>> +++ llvm/trunk/lib/Support/Windows/Process.inc Tue Feb  4 08:49:21 2014
>>> @@ -360,3 +360,10 @@ const char *Process::ResetColor() {
>>>    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
>>> defaultColors());
>>>    return 0;
>>>  }
>>> +
>>> +unsigned Process::GetRandomNumber() {
>>> +  unsigned int result;
>>> +  const errno_t ec = rand_s(&result);
>>> +  assert(ec == 0 && "rand_s failed");
>>> +  return result;
>>> +}
>>>
>>> Modified: llvm/trunk/unittests/Support/ProcessTest.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/ProcessTest.cpp?rev=200767&r1=200766&r2=200767&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/unittests/Support/ProcessTest.cpp (original)
>>> +++ llvm/trunk/unittests/Support/ProcessTest.cpp Tue Feb  4 08:49:21 2014
>>> @@ -39,6 +39,13 @@ TEST(ProcessTest, SelfProcess) {
>>>    EXPECT_GT(TimeValue::MaxTime, process::get_self()->get_wall_time());
>>>  }
>>>
>>> +TEST(ProcessTest, GetRandomNumberTest) {
>>> +  const unsigned r1 = Process::GetRandomNumber();
>>> +  const unsigned r2 = Process::GetRandomNumber();
>>> +  // It should be extremely unlikely that both r1 and r2 are 0.
>>> +  EXPECT_NE((r1 | r2), 0);
>>> +}
>>> +
>>>  #ifdef _MSC_VER
>>>  #define setenv(name, var, ignore) _putenv_s(name, var)
>>>  #endif
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>>
>>
>>
>> --
>> Thanks
>>
>> Galina



More information about the llvm-commits mailing list