浏览代码

* only resolve a dummy symbol if it is a type symbol (thus truly a dummy symbol)
+ added tests

git-svn-id: trunk@44172 -

svenbarth 5 年之前
父节点
当前提交
c4f3f7f453
共有 4 个文件被更改,包括 43 次插入1 次删除
  1. 2 0
      .gitattributes
  2. 1 1
      compiler/pexpr.pas
  3. 20 0
      tests/tbs/tb0668a.pp
  4. 20 0
      tests/tbs/tb0668b.pp

+ 2 - 0
.gitattributes

@@ -13097,6 +13097,8 @@ tests/tbs/tb0665.pp svneol=native#text/pascal
 tests/tbs/tb0666a.pp svneol=native#text/pascal
 tests/tbs/tb0666b.pp svneol=native#text/pascal
 tests/tbs/tb0667.pp svneol=native#text/pascal
+tests/tbs/tb0668a.pp svneol=native#text/pascal
+tests/tbs/tb0668b.pp svneol=native#text/pascal
 tests/tbs/ub0060.pp svneol=native#text/plain
 tests/tbs/ub0069.pp svneol=native#text/plain
 tests/tbs/ub0119.pp svneol=native#text/plain

+ 1 - 1
compiler/pexpr.pas

@@ -3011,11 +3011,11 @@ implementation
                wasgenericdummy:=false;
                if assigned(srsym) and
                    (sp_generic_dummy in srsym.symoptions) and
+                   (srsym.typ=typesym) and
                    (
                      (
                        (m_delphi in current_settings.modeswitches) and
                        not (token in [_LT, _LSHARPBRACKET]) and
-                       (srsym.typ=typesym) and
                        (ttypesym(srsym).typedef.typ=undefineddef)
                      )
                      or

+ 20 - 0
tests/tbs/tb0668a.pp

@@ -0,0 +1,20 @@
+{ %NORUN }
+
+program tb0668a;
+
+{$mode objfpc}
+
+procedure FreeAndNil(var Obj);
+begin
+end;
+
+generic procedure FreeAndNil<T: class>(var Obj: T);
+begin
+end;
+
+var
+  t: TObject;
+begin
+  FreeAndNil(t);
+  specialize FreeAndNil<TObject>(t);
+end.

+ 20 - 0
tests/tbs/tb0668b.pp

@@ -0,0 +1,20 @@
+{ %NORUN }
+
+program tb0668b;
+
+{$mode objfpc}
+
+generic procedure FreeAndNil<T: class>(var Obj: T);
+begin
+end;
+
+procedure FreeAndNil(var Obj);
+begin
+end;
+
+var
+  t: TObject;
+begin
+  FreeAndNil(t);
+  specialize FreeAndNil<TObject>(t);
+end.