From 50788e8b3b8a13b12883488851a7dbb3b437e575 Mon Sep 17 00:00:00 2001 From: svenbarth Date: Wed, 13 Sep 2017 21:05:04 +0000 Subject: [PATCH] * correctly encapsulate the RTTI data for sets to avoid alignment problems with the new SetSize field (fixes compilation on Sparc and basically every other target that requires proper alignment with 64-bit values dictating an 8-Byte alignment) git-svn-id: trunk@37201 - --- compiler/ncgrtti.pas | 12 +++++++----- compiler/symconst.pas | 6 ++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/compiler/ncgrtti.pas b/compiler/ncgrtti.pas index cb147d5085..a4b387fd32 100644 --- a/compiler/ncgrtti.pas +++ b/compiler/ncgrtti.pas @@ -998,7 +998,7 @@ implementation begin write_header(tcb,def,tkSet); tcb.begin_anonymous_record( - internaltypeprefixName[itp_rtti_set], + internaltypeprefixName[itp_rtti_set_outer], defaultpacking,reqalign, targetinfos[target_info.system]^.alignment.recordalignmin, targetinfos[target_info.system]^.alignment.maxCrecordalign); @@ -1012,13 +1012,15 @@ implementation else tcb.emit_ord_const(otUByte,u8inttype); end; + tcb.begin_anonymous_record( + internaltypeprefixName[itp_rtti_set_inner], + defaultpacking,reqalign, + targetinfos[target_info.system]^.alignment.recordalignmin, + targetinfos[target_info.system]^.alignment.maxCrecordalign); tcb.emit_ord_const(def.size,sizesinttype); - tcb.end_anonymous_record; - tcb.begin_anonymous_record(internaltypeprefixName[itp_rtti_ref],defaultpacking,reqalign, - targetinfos[target_info.system]^.alignment.recordalignmin, - targetinfos[target_info.system]^.alignment.maxCrecordalign); write_rtti_reference(tcb,def.elementdef,rt); tcb.end_anonymous_record; + tcb.end_anonymous_record; end; diff --git a/compiler/symconst.pas b/compiler/symconst.pas index e35d0b4fe6..d3dd48759c 100644 --- a/compiler/symconst.pas +++ b/compiler/symconst.pas @@ -721,7 +721,8 @@ type itp_rtti_enum_min_max_rec, itp_rtti_enum_basetype_array_rec, itp_rtti_ref, - itp_rtti_set, + itp_rtti_set_outer, + itp_rtti_set_inner, itp_init_record_operators, itp_threadvar_record, itp_objc_method_list, @@ -865,7 +866,8 @@ inherited_objectoptions : tobjectoptions = [oo_has_virtual,oo_has_private,oo_has '$rtti_enum_min_max_rec$', '$rtti_enum_basetype_array_rec$', '$rtti_ref$', - '$rtti_set$', + '$rtti_set_outer$', + '$rtti_set_inner$', '$init_record_operators$', '$threadvar_record$', '$objc_method_list$',