* 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 -
This commit is contained in:
svenbarth 2017-09-13 21:05:04 +00:00
parent e702b79063
commit 50788e8b3b
2 changed files with 11 additions and 7 deletions

View File

@ -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;

View File

@ -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$',