diff options
-rw-r--r-- | compiler/defcmp.pas | 6 | ||||
-rw-r--r-- | tests/webtbs/tw38309.pp | 56 |
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. |