소스 검색

* 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 -

florian 4 년 전
부모
커밋
aec18c2426
3개의 변경된 파일60개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 0
      .gitattributes
  2. 3 3
      compiler/defcmp.pas
  3. 56 0
      tests/webtbs/tw38309.pp

+ 1 - 0
.gitattributes

@@ -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

+ 3 - 3
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;

+ 56 - 0
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.