summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/defcmp.pas6
-rw-r--r--tests/webtbs/tw38309.pp56
2 files changed, 59 insertions, 3 deletions
diff --git a/compiler/defcmp.pas b/compiler/defcmp.pas
index 1d18a1649b..867b09f141 100644
--- a/compiler/defcmp.pas
+++ b/compiler/defcmp.pas
@@ -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;
diff --git a/tests/webtbs/tw38309.pp b/tests/webtbs/tw38309.pp
new file mode 100644
index 0000000000..a33ef45053
--- /dev/null
+++ b/tests/webtbs/tw38309.pp
@@ -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.