Browse Source

* patch by Rika: Perform 32-bit random if the bound fits into 32 bits at runtime, resolves #40171

florian 2 years ago
parent
commit
15f29b8fa0
1 changed files with 8 additions and 0 deletions
  1. 8 0
      rtl/inc/system.inc

+ 8 - 0
rtl/inc/system.inc

@@ -739,6 +739,14 @@ var
  q, bd, ad, bc, ac: qword;
  carry: qword;
 begin
+  if (l>=Low(int32)) and (l<=High(int32)) then
+    begin
+      { random(longint(l)), inlined. This makes random(NativeType) on 64-bit platforms match 32-bit when possible. }
+      if (l < 0) then
+        inc(l);
+      exit(longint(int64(system.random(high(int32)))*l shr 32));
+    end;
+
   if (l < 0) then
     begin
       inc(l);