* fix for Mantis #31795: append a $ to internal functions init, finalize, init_implicit and finalize_implicit as their section names otherwise look the same as those of user declared functions with the same name

+ added test

git-svn-id: trunk@36194 -
This commit is contained in:
svenbarth 2017-05-12 13:32:37 +00:00
parent 23ec3db057
commit c90fbe1bf0
3 changed files with 49 additions and 5 deletions

1
.gitattributes vendored
View File

@ -15489,6 +15489,7 @@ tests/webtbs/tw3173.pp svneol=native#text/plain
tests/webtbs/tw3174.pp svneol=native#text/plain
tests/webtbs/tw3176.pp svneol=native#text/plain
tests/webtbs/tw3179.pp svneol=native#text/plain
tests/webtbs/tw31795.pp svneol=native#text/pascal
tests/webtbs/tw3182.pp svneol=native#text/plain
tests/webtbs/tw3183.pp svneol=native#text/plain
tests/webtbs/tw3183a.pp svneol=native#text/plain

View File

@ -694,12 +694,12 @@ implementation
case flag of
uf_init :
begin
result:=create_main_proc(make_mangledname('',current_module.localsymtable,'init_implicit'),potype_unitinit,st);
result:=create_main_proc(make_mangledname('',current_module.localsymtable,'init_implicit$'),potype_unitinit,st);
result.procdef.aliasnames.insert(make_mangledname('INIT$',current_module.localsymtable,''));
end;
uf_finalize :
begin
result:=create_main_proc(make_mangledname('',current_module.localsymtable,'finalize_implicit'),potype_unitfinalize,st);
result:=create_main_proc(make_mangledname('',current_module.localsymtable,'finalize_implicit$'),potype_unitfinalize,st);
result.procdef.aliasnames.insert(make_mangledname('FINALIZE$',current_module.localsymtable,''));
if (not current_module.is_unit) then
result.procdef.aliasnames.insert('PASCALFINALIZE');
@ -1035,7 +1035,7 @@ type
internalerror(200212285);
{ Compile the unit }
init_procinfo:=create_main_proc(make_mangledname('',current_module.localsymtable,'init'),potype_unitinit,current_module.localsymtable);
init_procinfo:=create_main_proc(make_mangledname('',current_module.localsymtable,'init$'),potype_unitinit,current_module.localsymtable);
init_procinfo.procdef.aliasnames.insert(make_mangledname('INIT$',current_module.localsymtable,''));
init_procinfo.parse_body;
{ save file pos for debuginfo }
@ -1045,7 +1045,7 @@ type
if token=_FINALIZATION then
begin
{ Compile the finalize }
finalize_procinfo:=create_main_proc(make_mangledname('',current_module.localsymtable,'finalize'),potype_unitfinalize,current_module.localsymtable);
finalize_procinfo:=create_main_proc(make_mangledname('',current_module.localsymtable,'finalize$'),potype_unitfinalize,current_module.localsymtable);
finalize_procinfo.procdef.aliasnames.insert(make_mangledname('FINALIZE$',current_module.localsymtable,''));
finalize_procinfo.parse_body;
end
@ -2112,7 +2112,7 @@ type
if token=_FINALIZATION then
begin
{ Parse the finalize }
finalize_procinfo:=create_main_proc(make_mangledname('',current_module.localsymtable,'finalize'),potype_unitfinalize,current_module.localsymtable);
finalize_procinfo:=create_main_proc(make_mangledname('',current_module.localsymtable,'finalize$'),potype_unitfinalize,current_module.localsymtable);
finalize_procinfo.procdef.aliasnames.insert(make_mangledname('FINALIZE$',current_module.localsymtable,''));
finalize_procinfo.procdef.aliasnames.insert('PASCALFINALIZE');
finalize_procinfo.parse_body;

43
tests/webtbs/tw31795.pp Normal file
View File

@ -0,0 +1,43 @@
unit tw31795;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
type
TCriticalSection = class(TObject)
end;
implementation
var
gbbbbb : TCriticalSection;
procedure init;
var
s: String;
begin
s := 'Hello World';
end;
procedure Finalize;
var
s: String;
begin
s := 'Hello World';
end;
initialization
gbbbbb := TCriticalSection.Create;
finalization
gbbbbb.free;
end.