* weight currency->float conversions the same regardless if

the currency type is handled by the integer unit or the x87 fpu,
    resolves #38309

git-svn-id: trunk@48089 -
This commit is contained in:
florian 2021-01-05 22:39:16 +00:00
parent 57d9884d96
commit aec18c2426
3 changed files with 60 additions and 3 deletions

1
.gitattributes vendored
View File

@ -18632,6 +18632,7 @@ tests/webtbs/tw3827.pp svneol=native#text/plain
tests/webtbs/tw3829.pp svneol=native#text/plain
tests/webtbs/tw38295.pp svneol=native#text/pascal
tests/webtbs/tw38299.pp svneol=native#text/pascal
tests/webtbs/tw38309.pp svneol=native#text/pascal
tests/webtbs/tw38310a.pp svneol=native#text/pascal
tests/webtbs/tw38310b.pp svneol=native#text/pascal
tests/webtbs/tw38310c.pp svneol=native#text/pascal

View File

@ -843,11 +843,11 @@ implementation
{ and conversion to float is favoured) }
doconv:=tc_int_2_real;
if is_extended(def_to) then
eq:=te_convert_l2
eq:=te_convert_l1
else if is_double(def_to) then
eq:=te_convert_l3
eq:=te_convert_l2
else if is_single(def_to) then
eq:=te_convert_l4
eq:=te_convert_l3
else
eq:=te_convert_l2;
end;

56
tests/webtbs/tw38309.pp Normal file
View File

@ -0,0 +1,56 @@
program c;
{$mode objfpc}
uses
Math;
type
generic TBase<T> = class
private const
AConst = 1;
private
GenVarA: T;
GenVarB: T;
function Foo: Boolean;
end;
function TBase.Foo: Boolean;
begin
//Fails with trunk win-64 if TCur type is defined (e.g. not commented out) (*)
Result := SameValue(AConst, GenVarB);
//Fails with trunk win-64, EVEN if TCur definition is commented out
//Fails with 3.2.0 win-32, EVEN if TCur definition is commented out
//Fails with 3.2.0 win-64, EVEN if TCur definition is commented out, if it is defined it gives the errormesage twice for this line
Result := SameValue(GenVarA, GenVarB);
//Fails with trunk win-64 if TCur type is defined (e.g. not commented out)
Result := SameValue(GenVarA, AConst);
end;
type
TCur = specialize TBase<Currency>;
const
CurConst = 1;
var
CurVarA: Currency = 1;
CurVarB: Currency = 2;
begin
//Fails with trunk win-64
SameValue(CurConst, CurVarA);
//Fails with 3.2.0 win-64
SameValue(Currency(CurConst), CurVarA);
//Fails with 3.2.0 win-64
SameValue(CurVarA, CurVarB);
//Fails with trunk win-64
SameValue(CurVarA, CurConst);
//Fails with 3.2.0 win-64
SameValue(CurVarA, Currency(CurConst));
end.