浏览代码

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

florian 2 年之前
父节点
当前提交
15f29b8fa0
共有 1 个文件被更改,包括 8 次插入0 次删除
  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);