Browse Source

Fix for Mantis #28766.

ncgrtti.pas, write_persistent_type_info:
  * do not generate RTTI information for generics

git-svn-id: trunk@31911 -
svenbarth 10 years ago
parent
commit
3afc18f277
4 changed files with 29 additions and 3 deletions
  1. 2 0
      .gitattributes
  2. 5 3
      compiler/ncgrtti.pas
  3. 9 0
      tests/webtbs/tw28766.pp
  4. 13 0
      tests/webtbs/uw28766.pp

+ 2 - 0
.gitattributes

@@ -14758,6 +14758,7 @@ tests/webtbs/tw28718b.pp svneol=native#text/plain
 tests/webtbs/tw28718c.pp svneol=native#text/plain
 tests/webtbs/tw28718c.pp svneol=native#text/plain
 tests/webtbs/tw28718d.pp svneol=native#text/plain
 tests/webtbs/tw28718d.pp svneol=native#text/plain
 tests/webtbs/tw2876.pp svneol=native#text/plain
 tests/webtbs/tw2876.pp svneol=native#text/plain
+tests/webtbs/tw28766.pp svneol=native#text/pascal
 tests/webtbs/tw2883.pp svneol=native#text/plain
 tests/webtbs/tw2883.pp svneol=native#text/plain
 tests/webtbs/tw2885.pp svneol=native#text/plain
 tests/webtbs/tw2885.pp svneol=native#text/plain
 tests/webtbs/tw2886.pp svneol=native#text/plain
 tests/webtbs/tw2886.pp svneol=native#text/plain
@@ -15468,6 +15469,7 @@ tests/webtbs/uw27320.defaults.pp svneol=native#text/pascal
 tests/webtbs/uw2738.pp svneol=native#text/plain
 tests/webtbs/uw2738.pp svneol=native#text/plain
 tests/webtbs/uw2834.pp svneol=native#text/plain
 tests/webtbs/uw2834.pp svneol=native#text/plain
 tests/webtbs/uw28442.pp svneol=native#text/pascal
 tests/webtbs/uw28442.pp svneol=native#text/pascal
+tests/webtbs/uw28766.pp svneol=native#text/pascal
 tests/webtbs/uw2920.pp svneol=native#text/plain
 tests/webtbs/uw2920.pp svneol=native#text/plain
 tests/webtbs/uw2956.pp svneol=native#text/plain
 tests/webtbs/uw2956.pp svneol=native#text/plain
 tests/webtbs/uw2984.pp svneol=native#text/plain
 tests/webtbs/uw2984.pp svneol=native#text/plain

+ 5 - 3
compiler/ncgrtti.pas

@@ -109,14 +109,16 @@ implementation
         for i:=0 to st.DefList.Count-1 do
         for i:=0 to st.DefList.Count-1 do
           begin
           begin
             def:=tdef(st.DefList[i]);
             def:=tdef(st.DefList[i]);
+            { skip generics }
+            if [df_generic,df_genconstraint]*def.defoptions<>[] then
+              continue;
             case def.typ of
             case def.typ of
               recorddef:
               recorddef:
                 write_persistent_type_info(trecorddef(def).symtable,is_global);
                 write_persistent_type_info(trecorddef(def).symtable,is_global);
               objectdef :
               objectdef :
                 begin
                 begin
-                  { Skip generics and forward defs }
-                  if ([df_generic,df_genconstraint]*def.defoptions<>[]) or
-                     (oo_is_forward in tobjectdef(def).objectoptions) then
+                  { Skip forward defs }
+                  if (oo_is_forward in tobjectdef(def).objectoptions) then
                     continue;
                     continue;
                   write_persistent_type_info(tobjectdef(def).symtable,is_global);
                   write_persistent_type_info(tobjectdef(def).symtable,is_global);
                 end;
                 end;

+ 9 - 0
tests/webtbs/tw28766.pp

@@ -0,0 +1,9 @@
+{ %NORUN }
+
+program tw28766;
+
+uses
+  uw28766;
+
+begin
+end.

+ 13 - 0
tests/webtbs/uw28766.pp

@@ -0,0 +1,13 @@
+unit uw28766;
+
+{$mode delphi}
+
+interface
+
+type
+  TSimpleGeneric<A, B> = function(constref Value: A): B;
+
+implementation
+
+end.
+