Access violation during compilation - stack recursive call access violation
Summary
I'm working on a big project, and whenever I try to add new code and Compile (CTRL+F9)
, I get an access violation error.
The trace for the call stack is in the Relevant logs.
I tried to debug the problem, but I discovered a stack problem after a couple of recursive calls.
In the fppu.pas inside this function tppumodule.load_usedunits
,
The problem happens when there are a lot of ppu files, and when one of the functions returns, it returns to this condition in this code.
right after the tppumodule(pu.u).loadppu(self);
https://gitlab.com/freepascal.org/fpc/source/-/blob/main/compiler/fppu.pas?ref_type=heads#L1955-1960
tppumodule(pu.u).loadppu(self);
{ if this unit is compiled we can stop }
if state in [ms_compiled,ms_processed] then
exit;
{ add this unit to the dependencies }
pu.u.adddependency(self,true);
When I ran the compiler in x64dbg, I noticed the stack bug. At the end of function tppumodule.loadppu
right at the execution of the ret instruction, the code returns in the middle of the load_usedunits
function at the condition I mentioned.
So right after this return in the middle of the function
There's this code pu.u.adddependency(self,true),
and pu
points at a random pointer in the stack (Check the screenshot
). That's when the code breaks and an Access Violation happens.
System Information
- Operating system: Windows
- Processor architecture: x86-64
- Compiler version: trunk
- Device: Computer
Steps to reproduce
You need a big project with a lot of units ^_^
Example Project
N/A
What is the current bug behavior?
I think the recursive calling in the fppu unit misses up the stack somehow.
What is the expected (correct) behavior?
The code should continue from where it should be, not from the middle of the function :D
Relevant logs and/or screenshots
Hint: (11030) Start of reading config file F:\FPCross\fpc\bin\x86_64-win64\fpc.cfg
Hint: (11031) End of reading config file F:\FPCross\fpc\bin\x86_64-win64\fpc.cfg
Free Pascal Compiler version 3.3.1-15013-g634e01d525 [2024/07/11] for x86_64
Copyright (c) 1993-2024 by Florian Klaempfl and others
(1002) Target OS: Win64 for x64
(3104) Compiling IceCreamBot.lpr
Error: (1026) Compilation raised exception internally
Fatal: (1018) Compilation aborted
An unhandled exception occurred at $0000000100041E0B:
EAccessViolation: Access violation
$0000000100041E0B ADDDEPENDENCY, line 1009 of fmodule.pas
$00000001001DE6DA LOAD_USEDUNITS, line 1960 of fppu.pas
$00000001001DEE88 TRY_LOAD_PPUFILE, line 2223 of fppu.pas
$00000001001DF29F LOADPPU, line 2366 of fppu.pas
$00000001001DE896 LOAD_USEDUNITS, line 2016 of fppu.pas
$00000001001DEE88 TRY_LOAD_PPUFILE, line 2223 of fppu.pas
$00000001001DF29F LOADPPU, line 2366 of fppu.pas
$00000001001DE6BE LOAD_USEDUNITS, line 1955 of fppu.pas
$00000001001DEE88 TRY_LOAD_PPUFILE, line 2223 of fppu.pas
$00000001001DF29F LOADPPU, line 2366 of fppu.pas
$00000001001DE896 LOAD_USEDUNITS, line 2016 of fppu.pas
$00000001001DEE88 TRY_LOAD_PPUFILE, line 2223 of fppu.pas
$00000001001DF29F LOADPPU, line 2366 of fppu.pas
$00000001001DE6BE LOAD_USEDUNITS, line 1955 of fppu.pas
$00000001001DEE88 TRY_LOAD_PPUFILE, line 2223 of fppu.pas
$00000001001DF29F LOADPPU, line 2366 of fppu.pas
$00000001001DE896 LOAD_USEDUNITS, line 2016 of fppu.pas
Error: F:\FPCross\fpc\bin\x86_64-win64\ppcx64.exe returned an error exitcode
Possible fixes
I think this part of loading the ppu files needs a rewrite ^_^