From bfe5733624f4e7c0a929ed684628b88908d6f72b Mon Sep 17 00:00:00 2001 From: Sven/Sarah Barth Date: Mon, 6 May 2024 23:19:53 +0200 Subject: [PATCH] * allow sp_generic_dummysym for procsyms even if there are no generic overloads --- compiler/symsym.pas | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/compiler/symsym.pas b/compiler/symsym.pas index d90c0a05f7..d1d76d3dda 100644 --- a/compiler/symsym.pas +++ b/compiler/symsym.pas @@ -1074,18 +1074,19 @@ implementation end; if sp_generic_dummy in symoptions then begin - if not assigned(fgenprocsymovlds) then - internalerror(2021010602); if not assigned(fgenprocsymovldsderefs) then fgenprocsymovldsderefs:=tfplist.create else fgenprocsymovldsderefs.clear; - for i:=0 to fgenprocsymovlds.count-1 do - begin - sym:=tprocsym(fgenprocsymovlds[i]); - d.build(sym); - fgenprocsymovldsderefs.add(pointer(ptrint(d.dataidx))); - end; + { this might happen for procsyms in classes that override symbols + in a parent class that generic overloads } + if assigned(fgenprocsymovlds) then + for i:=0 to fgenprocsymovlds.count-1 do + begin + sym:=tprocsym(fgenprocsymovlds[i]); + d.build(sym); + fgenprocsymovldsderefs.add(pointer(ptrint(d.dataidx))); + end; end; end; @@ -1109,16 +1110,19 @@ implementation end; if sp_generic_dummy in symoptions then begin - if not assigned(fgenprocsymovlds) then - internalerror(2021010603); + {if not assigned(fgenprocsymovlds) then + internalerror(2021010603);} if not assigned(fgenprocsymovldsderefs) then internalerror(2021010302); - fgenprocsymovlds.clear; - for i:= 0 to fgenprocsymovldsderefs.count-1 do + if assigned(fgenprocsymovlds) then begin - d.dataidx:=ptrint(fgenprocsymovldsderefs[i]); - sym:=tprocsym(d.resolve); - fgenprocsymovlds.add(sym); + fgenprocsymovlds.clear; + for i:= 0 to fgenprocsymovldsderefs.count-1 do + begin + d.dataidx:=ptrint(fgenprocsymovldsderefs[i]); + sym:=tprocsym(d.resolve); + fgenprocsymovlds.add(sym); + end; end; end; end;