-- Zusammenführen von r47415 in ».«:

U    compiler/nbas.pas
A    tests/webtbs/tw38069.pp
A    tests/webtbs/uw38069.pp
-- Aufzeichnung der Informationen für Zusammenführung von r47415 in ».«:
 U   .

git-svn-id: branches/fixes_3_2@47422 -
This commit is contained in:
florian 2020-11-15 14:15:06 +00:00
parent f8e55c4350
commit 37e676d927
4 changed files with 116 additions and 0 deletions

2
.gitattributes vendored
View File

@ -17718,6 +17718,7 @@ tests/webtbs/tw3780.pp svneol=native#text/plain
tests/webtbs/tw3782.pp svneol=native#text/plain
tests/webtbs/tw3796.pp svneol=native#text/plain
tests/webtbs/tw3805.pp svneol=native#text/plain
tests/webtbs/tw38069.pp svneol=native#text/pascal
tests/webtbs/tw3814.pp svneol=native#text/plain
tests/webtbs/tw3827.pp svneol=native#text/plain
tests/webtbs/tw3829.pp svneol=native#text/plain
@ -18254,6 +18255,7 @@ tests/webtbs/uw3429.pp svneol=native#text/plain
tests/webtbs/uw3474a.pp svneol=native#text/plain
tests/webtbs/uw3474b.pp svneol=native#text/plain
tests/webtbs/uw36544.pp svneol=native#text/pascal
tests/webtbs/uw38069.pp svneol=native#text/pascal
tests/webtbs/uw3968.pp svneol=native#text/plain
tests/webtbs/uw4056.pp svneol=native#text/plain
tests/webtbs/uw4140.pp svneol=native#text/plain

View File

@ -1067,6 +1067,12 @@ implementation
if assigned(tempinfo^.tempinitcode) then
firstpass(tempinfo^.tempinitcode);
inc(current_procinfo.estimatedtempsize,size);;
{ if a temp. create node is loaded from a ppu, it could be that the unit was compiled with other settings which
enabled a certain type to be stored in a register while the current settings do not support this, so correct this here
if needed
}
if not(tstoreddef(tempinfo^.typedef).is_fpuregable) and not(tstoreddef(tempinfo^.typedef).is_intregable) and (ti_may_be_in_reg in tempflags) then
excludetempflag(ti_may_be_in_reg);
end;

12
tests/webtbs/tw38069.pp Normal file
View File

@ -0,0 +1,12 @@
{ %cpu=i386 }
{$mode objfpc}
{$OPTIMIZATION REGVAR}
{.$FPUTYPE SSE2} //uncommenting this resolves the problem
uses uw38069;
var z: complex;
n: integer;
begin
z := z*n; //internal error 200604201
end.

96
tests/webtbs/uw38069.pp Normal file
View File

@ -0,0 +1,96 @@
{ %cpu=i386 }
{$mode objfpc}
{$modeswitch advancedrecords}
{$FPUTYPE SSE2}
unit uw38069;
INTERFACE
uses sysutils;
type float = double; //#zentral definieren
complex = record
public
re, im: float;
class operator * (const a, b: complex): complex; inline;
class operator * (const a: complex; const x:float): complex; inline;
class operator * (const x: float; const a: complex): complex; inline;
class operator := (const x: float): complex; inline;
class operator = (const a,b: complex): boolean; inline;
class operator - (const a: complex): complex; inline;
end;
procedure mul (const a,b: complex; var c: complex); inline; overload;
procedure mul (const a: complex; const b: float; var c: complex); inline; overload;
procedure mul (const a: float; const b: complex; var c: complex); inline; overload;
IMPLEMENTATION
procedure mul (const a,b: complex; var c: complex);
begin
c.re := a.re*b.re - a.im*b.im;
c.im := a.re*b.im + a.im*b.re;
end;
procedure mul (const a: complex; const b: float; var c: complex);
begin
c.re := a.re*b;
c.im := a.im*b;
end;
procedure mul (const a: float; const b: complex; var c: complex);
begin
mul (b,a,c);
end;
function pow (x,y: float): float;
begin
result := exp (y*ln(x));
end;
function ToComplex (a,b: float): complex;
begin
result.re := a;
result.im := b;
end;
//Operatoren complex-complex
class operator complex.* (const a,b: complex): complex;
begin
mul (a,b,result);
end;
class operator complex.* (const x: float; const a: complex): complex;
begin
mul (a,x,result);
end;
class operator complex.* (const a: complex; const x:float): complex;
begin
mul (a,x,result);
end;
class operator complex.:= (const x: float): complex;
begin
result.re := x;
result.im := 0;
end;
class operator complex.= (const a,b: complex): boolean;
begin
result := (a.re=b.re) and (a.im=b.im);
end;
class operator complex.- (const a: complex): complex;
begin
result.re := -a.re;
result.im := -a.im;
end;
begin
end.