Преглед изворни кода

* don't reuse defs for attribute lists or individual attributes with parameters, as
they don't have a constant size
o fixes LLVM internalerror 2015122402 for test/tcustomattr{12,13,19}

git-svn-id: trunk@42463 -

Jonas Maebe пре 6 година
родитељ
комит
12e63d8a2c
2 измењених фајлова са 10 додато и 5 уклоњено
  1. 10 3
      compiler/ncgrtti.pas
  2. 0 2
      compiler/symconst.pas

+ 10 - 3
compiler/ncgrtti.pas

@@ -1828,16 +1828,23 @@ implementation
 
       tbltcb:=ctai_typedconstbuilder.create([tcalo_is_lab,tcalo_make_dead_strippable,tcalo_apply_constalign]);
 
+      { can't use reuse a name, because the size depends on the number and kinds of of parameters each attribute has }
       tbltcb.begin_anonymous_record(
-        internaltypeprefixName[itp_rtti_attr_list]+tostr(count),
+        '',
         defaultpacking,min(reqalign,SizeOf(PInt)),
         targetinfos[target_info.system]^.alignment.recordalignmin);
       tbltcb.emit_ord_const(count,u16inttype);
       for i:=0 to count-1 do
         begin
-          tbltcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_attr_entry],defaultpacking,min(reqalign,SizeOf(PInt)),
-            targetinfos[target_info.system]^.alignment.recordalignmin);
           attr:=trtti_attribute(attr_list.rtti_attributes[i]);
+          { only the length of an entry with no parameters is constant, so only reuse a recorddef for
+            those entries }
+          if length(attr.paras)=0 then
+            tbltcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_attr_entry],defaultpacking,min(reqalign,SizeOf(PInt)),
+              targetinfos[target_info.system]^.alignment.recordalignmin)
+          else
+            tbltcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
+              targetinfos[target_info.system]^.alignment.recordalignmin);
 
           write_rtti_reference(tbltcb,ttypesym(attr.typesym).typedef,fullrtti);
 

+ 0 - 2
compiler/symconst.pas

@@ -732,7 +732,6 @@ type
     itp_rtti_common_data,
     itp_rtti_prop,
     itp_rtti_ansistr,
-    itp_rtti_attr_list,
     itp_rtti_attr_entry,
     itp_rtti_ord_outer,
     itp_rtti_ord_middle,
@@ -878,7 +877,6 @@ inherited_objectoptions : tobjectoptions = [oo_has_virtual,oo_has_private,oo_has
        '$rtti_common_data$',
        '$rtti_prop$',
        '$rtti_ansistr$',
-       '$rtti_attr_list$',
        '$rtti_attr_entry$',
        '$rtti_ord_outer$',
        '$rtti_ord_middle$',