瀏覽代碼

* fix for Mantis #38083: ensure that the sp_generic_dummy flag is set correctly on the new procsym when replacing a dummy sym
+ added test

git-svn-id: trunk@47424 -

svenbarth 4 年之前
父節點
當前提交
3d2ee097b5
共有 3 個文件被更改,包括 25 次插入0 次删除
  1. 1 0
      .gitattributes
  2. 5 0
      compiler/pdecsub.pas
  3. 19 0
      tests/webtbs/tw38083.pp

+ 1 - 0
.gitattributes

@@ -18531,6 +18531,7 @@ tests/webtbs/tw38051.pp svneol=native#text/pascal
 tests/webtbs/tw38054.pp svneol=native#text/plain
 tests/webtbs/tw38069.pp svneol=native#text/pascal
 tests/webtbs/tw38074.pp svneol=native#text/pascal
+tests/webtbs/tw38083.pp svneol=native#text/pascal
 tests/webtbs/tw3814.pp svneol=native#text/plain
 tests/webtbs/tw3827.pp svneol=native#text/plain
 tests/webtbs/tw3829.pp svneol=native#text/plain

+ 5 - 0
compiler/pdecsub.pas

@@ -535,6 +535,7 @@ implementation
         procstartfilepos : tfileposinfo;
         i,
         index : longint;
+        addgendummy,
         hadspecialize,
         firstpart,
         found,
@@ -867,6 +868,7 @@ implementation
         srsym:=nil;
         genericparams:=nil;
         hadspecialize:=false;
+        addgendummy:=false;
 
         if not assigned(genericdef) then
           begin
@@ -1071,6 +1073,7 @@ implementation
                                as if nothing happened }
                              hidesym(srsym);
                              searchagain:=true;
+                             addgendummy:=true;
                            end
                          else
                           begin
@@ -1106,6 +1109,8 @@ implementation
                   aprocsym:=cprocsym.create('$'+lower(sp))
                 else
                   aprocsym:=cprocsym.create(orgsp);
+                if addgendummy then
+                  include(aprocsym.symoptions,sp_generic_dummy);
                 symtablestack.top.insert(aprocsym);
               end;
           end;

+ 19 - 0
tests/webtbs/tw38083.pp

@@ -0,0 +1,19 @@
+{ %NORUN }
+
+program tw38083;
+
+{$MODE Delphi}
+
+  procedure Test<T>(A: T; B: Boolean); overload;
+  begin
+
+  end;
+
+  procedure Test(A: String); overload;
+  begin
+    Test<String>(A, True);
+  end;
+
+begin
+
+end.