mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-06 04:58:32 +02:00
* fixed exit with ansistring return from function call, no_fast_exit
should be set in det_resulttype instead of pass_1
This commit is contained in:
parent
1bfc8ffbce
commit
2b8091365e
@ -1278,6 +1278,22 @@ implementation
|
|||||||
{ ensure that the result type is set }
|
{ ensure that the result type is set }
|
||||||
resulttype:=procdefinition.rettype;
|
resulttype:=procdefinition.rettype;
|
||||||
|
|
||||||
|
{ get a register for the return value }
|
||||||
|
if (not is_void(resulttype.def)) then
|
||||||
|
begin
|
||||||
|
if ret_in_acc(resulttype.def) then
|
||||||
|
begin
|
||||||
|
{ wide- and ansistrings are returned in EAX }
|
||||||
|
{ but they are imm. moved to a memory location }
|
||||||
|
if is_widestring(resulttype.def) or
|
||||||
|
is_ansistring(resulttype.def) then
|
||||||
|
begin
|
||||||
|
{ we use ansistrings so no fast exit here }
|
||||||
|
procinfo^.no_fast_exit:=true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ constructors return their current class type, not the type where the
|
{ constructors return their current class type, not the type where the
|
||||||
constructor is declared, this can be different because of inheritance }
|
constructor is declared, this can be different because of inheritance }
|
||||||
if (procdefinition.proctypeoption=potype_constructor) then
|
if (procdefinition.proctypeoption=potype_constructor) then
|
||||||
@ -1428,13 +1444,9 @@ implementation
|
|||||||
{ wide- and ansistrings are returned in EAX }
|
{ wide- and ansistrings are returned in EAX }
|
||||||
{ but they are imm. moved to a memory location }
|
{ but they are imm. moved to a memory location }
|
||||||
if is_widestring(resulttype.def) or
|
if is_widestring(resulttype.def) or
|
||||||
is_ansistring(resulttype.def) then
|
is_ansistring(resulttype.def) then
|
||||||
begin
|
begin
|
||||||
location.loc:=LOC_MEM;
|
location.loc:=LOC_MEM;
|
||||||
{ this is wrong we still need one register PM
|
|
||||||
registers32:=0; }
|
|
||||||
{ we use ansistrings so no fast exit here }
|
|
||||||
procinfo^.no_fast_exit:=true;
|
|
||||||
registers32:=1;
|
registers32:=1;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
@ -1610,7 +1622,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.32 2001-04-26 21:55:05 peter
|
Revision 1.33 2001-05-20 12:09:31 peter
|
||||||
|
* fixed exit with ansistring return from function call, no_fast_exit
|
||||||
|
should be set in det_resulttype instead of pass_1
|
||||||
|
|
||||||
|
Revision 1.32 2001/04/26 21:55:05 peter
|
||||||
* defcoll must be assigned in insert_typeconv
|
* defcoll must be assigned in insert_typeconv
|
||||||
|
|
||||||
Revision 1.31 2001/04/21 12:03:11 peter
|
Revision 1.31 2001/04/21 12:03:11 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user