[Bug] FPC TParallel.For Access Violation
## Summary `System.Threading` `TParallel.For` raises an `EAccessViolation` in FPC when compiled with optimization levels higher than `-O1`. A local copy of `System.Threading.pas` compiled with `-O1` works. The RTL version (built with higher optimization) crashes. ## Steps to reproduce 1. Compile and run the demo program below. 2. With the RTL version of `System.Threading` (built by FPCUPDeluxe), the program throws an `EAccessViolation`. 3. Copy `System.Threading.pas` into the project folder, reference this in our demo 4. compile with `-O1` optimization level: → Works correctly. 5. compile with `-O2` or above optimization level: → Access Violation returns. ## System Information * **OS:** Windows 10 (64-bit) * **CPU:** x86-64 * **Compiler:** FPC Trunk (Free Pascal Compiler version 3.3.1-18896-g2aeddc8041-dirty [2025/11/30] for x86_64) * **Device:** Desktop PC ## Example Program ```pascal program TestParallelForBug; {$MODE DELPHI} uses SysUtils, System.Threading; const NUM_ITEMS = 16; procedure RunTest(AParallelism: Integer); var Data, SerialData: TArray<Integer>; I: Integer; begin Writeln('--- Parallelism = ', AParallelism, ' ---'); SetLength(Data, NUM_ITEMS); SetLength(SerialData, NUM_ITEMS); for I := 0 to NUM_ITEMS - 1 do SerialData[I] := I * 2; TParallel.&For( 0, AParallelism - 1, procedure(Lane: Integer) var J, StartIdx, EndIdx, ChunkSize: Integer; begin ChunkSize := NUM_ITEMS div AParallelism; StartIdx := Lane * ChunkSize; if Lane = AParallelism - 1 then EndIdx := NUM_ITEMS - 1 else EndIdx := StartIdx + ChunkSize - 1; for J := StartIdx to EndIdx do Data[J] := J * 2; end ); end; begin RunTest(1); RunTest(4); end. ``` ## Current behavior When compiled normally (RTL optimized at >O1): ``` --- Parallelism = 1 --- EAccessViolation: Access violation Done. Press ENTER to exit. ``` ## Expected behavior Program should run without exceptions. ## Notes * The issue occurs at optimization level **-O2 or higher**. * Compiling with **-O1** avoids the problem. * This points to an optimization-related compiler bug.
issue