* ncgrtti has to use target pointer sizes, so changed SizeOf(PtrInt) into SizeOf(PInt), should fix #31964

* try to avoid to use anonymous records in ncgrtti

git-svn-id: trunk@36416 -
This commit is contained in:
florian 2017-06-04 19:57:46 +00:00
parent b4d7959c7a
commit 126b834976
2 changed files with 21 additions and 19 deletions

View File

@ -184,7 +184,7 @@ implementation
def : tprocdef;
para : tparavarsym;
begin
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PtrInt)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
@ -220,7 +220,7 @@ implementation
def.init_paraloc_info(callerside);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PtrInt)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
@ -235,7 +235,7 @@ implementation
begin
para:=tparavarsym(def.paras[k]);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PtrInt)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
@ -350,13 +350,13 @@ implementation
locs:=paramanager.cgparalocs_to_rttiparalocs(para^.location);
if length(locs)>high(byte) then
internalerror(2017010601);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PtrInt)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
tcb.emit_ord_const(length(locs),u8inttype);
for i:=low(locs) to high(locs) do
begin
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PtrInt)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
tcb.emit_ord_const(locs[i].loctype,u8inttype);
@ -712,7 +712,7 @@ implementation
end;
begin
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PtrInt)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
tcb.emit_ord_const(published_properties_count(st),u16inttype);
@ -733,7 +733,7 @@ implementation
alignment), but it starts aligned }
tcb.begin_anonymous_record(
propdefname,
1,min(reqalign,SizeOf(PtrInt)),
1,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
if ppo_indexed in tpropertysym(sym).propoptions then
@ -1013,7 +1013,7 @@ implementation
tcb.emit_ord_const(otUByte,u8inttype);
end;
tcb.end_anonymous_record;
tcb.begin_anonymous_record('',defaultpacking,reqalign,
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);
@ -1106,7 +1106,7 @@ implementation
begin
write_header(tcb,def,tkClassRef);
tcb.begin_anonymous_record(
'',
internaltypeprefixName[itp_rtti_ref],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
@ -1118,7 +1118,7 @@ implementation
begin
write_header(tcb,def,tkPointer);
tcb.begin_anonymous_record(
'',
internaltypeprefixName[itp_rtti_ref],
defaultpacking,reqalign,
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
@ -1168,7 +1168,7 @@ implementation
current_asmdata.AsmLists[al_rtti].concatList(
tcb.get_final_asmlist(rttilab,rttidef,sec_rodata,rttilab.name,
sizeof(pint)));
sizeof(PInt)));
tcb.free;
end;
@ -1235,7 +1235,7 @@ implementation
{ every parameter is expected to start aligned }
tcb.begin_anonymous_record(
internaltypeprefixName[itp_rtti_proc_param]+tostr(length(parasym.realname)),
defaultpacking,min(reqalign,SizeOf(PtrInt)),
defaultpacking,min(reqalign,SizeOf(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
{ write flags for current parameter }
@ -1626,7 +1626,7 @@ implementation
{ now emit the data: first the mode }
tcb.emit_tai(Tai_const.create_32bit(longint(mode)),u32inttype);
{ align }
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(pointer)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
if mode=lookup then
@ -1653,7 +1653,7 @@ implementation
else
begin
tcb.emit_ord_const(sym_count,u32inttype);
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(pointer)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
for i:=0 to sym_count-1 do
@ -1676,7 +1676,7 @@ implementation
rttilab:=current_asmdata.DefineAsmSymbol(Tstoreddef(def).rtti_mangledname(rt)+'_o2s',AB_GLOBAL,AT_DATA_NOINDIRECT,tabledef);
current_asmdata.asmlists[al_rtti].concatlist(tcb.get_final_asmlist(
rttilab,tabledef,sec_rodata,
rttilab.name,sizeof(pint)));
rttilab.name,sizeof(PInt)));
tcb.free;
current_module.add_public_asmsym(rttilab);
@ -1697,12 +1697,12 @@ implementation
{ write rtti data }
tcb:=ctai_typedconstbuilder.create([tcalo_make_dead_strippable,tcalo_data_force_indirect]);
{ begin of Tstring_to_ord }
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(pointer)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
tcb.emit_ord_const(syms.count,s32inttype);
{ begin of "data" array in Tstring_to_ord }
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(pointer)),
tcb.begin_anonymous_record('',defaultpacking,min(reqalign,sizeof(PInt)),
targetinfos[target_info.system]^.alignment.recordalignmin,
targetinfos[target_info.system]^.alignment.maxCrecordalign);
for i:=0 to syms.count-1 do
@ -1723,7 +1723,7 @@ implementation
rttilab:=current_asmdata.DefineAsmSymbol(Tstoreddef(def).rtti_mangledname(rt)+'_s2o',AB_GLOBAL,AT_DATA_NOINDIRECT,tabledef);
current_asmdata.asmlists[al_rtti].concatlist(tcb.get_final_asmlist(
rttilab,tabledef,sec_rodata,
rttilab.name,sizeof(pint)));
rttilab.name,sizeof(PInt)));
tcb.free;
current_module.add_public_asmsym(rttilab);
@ -1909,7 +1909,7 @@ implementation
begin
if tf_requires_proper_alignment in target_info.flags then
begin
reqalign:=min(sizeof(qword),target_info.alignment.maxCrecordalign);
reqalign:=min(sizeof(QWord),target_info.alignment.maxCrecordalign);
defaultpacking:=C_alignment;
end
else

View File

@ -719,6 +719,7 @@ type
itp_rtti_enum_min_max_rec,
itp_rtti_enum_basetype_array_rec,
itp_init_record_operators,
itp_rtti_ref,
itp_threadvar_record,
itp_objc_method_list,
itp_objc_proto_list,
@ -860,6 +861,7 @@ inherited_objectoptions : tobjectoptions = [oo_has_virtual,oo_has_private,oo_has
'$rtti_enum_size_start_rec$',
'$rtti_enum_min_max_rec$',
'$rtti_enum_basetype_array_rec$',
'$rtti_ref$',
'$init_record_operators$',
'$threadvar_record$',
'$objc_method_list$',