llvmdbg: fixed variant fields

They have to be members with a union type, rather than union types
themselves.
This commit is contained in:
Jonas Maebe 2022-06-17 21:43:02 +02:00
parent b68512a969
commit d92bc0e760

View File

@ -1195,9 +1195,20 @@ implementation
begin
{ more deeply nested variant }
uniondi:=tai_llvmspecialisedmetadatanode.create(tspecialisedmetadatanodekind.DICompositeType);
list.concat(uniondi);
fieldlist.addvalue(llvm_getmetadatareftypedconst(uniondi));
fielddi:=tai_llvmspecialisedmetadatanode.create(tspecialisedmetadatanodekind.DIDerivedType);
fielddi.addenum('tag','DW_TAG_member');
fielddi.addmetadatarefto('scope',scope);
try_add_file_metaref(fielddi,field.fileinfo,false);
fielddi.addmetadatarefto('baseType',uniondi);
fielddi.addint64('size',cappedsize-min(field.bitoffset,cappedsize));
bitoffset:=bitoffsetfromvariantstart(field,variantinfolist,cappedsize);
if bitoffset<>0 then
fielddi.addqword('offset',bitoffset);
list.concat(fielddi);
fieldlist.addvalue(llvm_getmetadatareftypedconst(fielddi));
list.concat(uniondi);
uniondi.addenum('tag','DW_TAG_union_type');
uniondi.addmetadatarefto('scope',scope);
try_add_file_metaref(uniondi,field.fileinfo,false);