Browse Source

* patch by Jan Bruns to solve an issue with the new overloading selection code, resolves #37969

git-svn-id: trunk@47211 -
florian 4 years ago
parent
commit
dfaee4f04b
3 changed files with 20 additions and 3 deletions
  1. 1 0
      .gitattributes
  2. 8 3
      compiler/htypechk.pas
  3. 11 0
      tests/webtbs/tw37969.pp

+ 1 - 0
.gitattributes

@@ -18498,6 +18498,7 @@ tests/webtbs/tw37878.pp svneol=native#text/plain
 tests/webtbs/tw37926.pp svneol=native#text/pascal
 tests/webtbs/tw37926.pp svneol=native#text/pascal
 tests/webtbs/tw37949.pp svneol=native#text/pascal
 tests/webtbs/tw37949.pp svneol=native#text/pascal
 tests/webtbs/tw3796.pp svneol=native#text/plain
 tests/webtbs/tw3796.pp svneol=native#text/plain
+tests/webtbs/tw37969.pp svneol=native#text/pascal
 tests/webtbs/tw3805.pp svneol=native#text/plain
 tests/webtbs/tw3805.pp svneol=native#text/plain
 tests/webtbs/tw3814.pp svneol=native#text/plain
 tests/webtbs/tw3814.pp svneol=native#text/plain
 tests/webtbs/tw3827.pp svneol=native#text/plain
 tests/webtbs/tw3827.pp svneol=native#text/plain

+ 8 - 3
compiler/htypechk.pas

@@ -3691,7 +3691,7 @@ implementation
                end;
                end;
              { Setup the first procdef as best, only count it as a result
              { Setup the first procdef as best, only count it as a result
                when it is valid }
                when it is valid }
-             if FCandidateProcs^.invalid then
+             if besthpstart^.invalid then
                cntpd:=0
                cntpd:=0
              else
              else
                cntpd:=1;
                cntpd:=1;
@@ -3701,7 +3701,9 @@ implementation
                  restart := decide_restart(hp,besthpstart);
                  restart := decide_restart(hp,besthpstart);
                  if not restart then
                  if not restart then
                    begin
                    begin
-                   if not singlevariant then
+                   if besthpstart^.invalid then res := 1
+                   else if hp^.invalid then res := -1
+                   else if not singlevariant then
                      res:=is_better_candidate(hp,besthpstart)
                      res:=is_better_candidate(hp,besthpstart)
                    else
                    else
                      res:=is_better_candidate_single_variant(hp,besthpstart);
                      res:=is_better_candidate_single_variant(hp,besthpstart);
@@ -3721,7 +3723,10 @@ implementation
                        end;
                        end;
                      { besthpstart is already set to hp }
                      { besthpstart is already set to hp }
                      bestpd:=besthpstart^.data;
                      bestpd:=besthpstart^.data;
-                     cntpd:=1;
+                     if besthpstart^.invalid then
+                       cntpd:=0
+                     else
+                       cntpd:=1;
                    end
                    end
                  else if (res<0) then
                  else if (res<0) then
                    begin
                    begin

+ 11 - 0
tests/webtbs/tw37969.pp

@@ -0,0 +1,11 @@
+{$mode objfpc}
+program Project1;
+
+uses
+  sysutils;
+var
+  aValue: variant;
+  s: String;
+begin
+  s := Trim( aValue );
+end.