diff --git a/compiler/i386/n386cal.pas b/compiler/i386/n386cal.pas index 6b15144c14..80fbbb8a9b 100644 --- a/compiler/i386/n386cal.pas +++ b/compiler/i386/n386cal.pas @@ -81,6 +81,16 @@ implementation exit; end; + { on win32, the caller is responsible for removing the funcret } + { pointer from the stack, unlike on Linux. Don't know about } + { elsewhere (except Darwin, handled above), but since the default } + { was "callee removes funcret pointer from stack" until now, we'll } + { keep that default for everyone else (ncgcal decreases popsize by } + { sizeof(aint) in case of ret_in_param()) } + if (target_info.system = system_i386_win32) and + paramanager.ret_in_param(procdefinition.returndef,procdefinition.proccalloption) then + inc(pop_size,sizeof(aint)); + { better than an add on all processors } if pop_size=4 then begin