http://d.puremagic.com/issues/show_bug.cgi?id=4212
Robert Clipsham <rob...@octarineparrot.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch --- Comment #2 from Robert Clipsham <rob...@octarineparrot.com> 2010-05-20 20:45:35 BST --- The patch below fixes both test cases: Index: backend/dwarf.c =================================================================== --- backend/dwarf.c (revisi�n: 494) +++ backend/dwarf.c (copia de trabajo) @@ -1558,6 +1558,13 @@ DW_AT_type, DW_FORM_ref4, 0, 0, }; + static unsigned char abbrevTypeArrayVoid[] = + { + DW_TAG_array_type, + 1, // child (the subrange type) + DW_AT_sibling, DW_FORM_ref4, + 0, 0, + }; static unsigned char abbrevTypeSubrange[] = { DW_TAG_subrange_type, @@ -1573,7 +1580,6 @@ DW_AT_type, DW_FORM_ref4, 0, 0, }; - unsigned code1 = dwarf_abbrev_code(abbrevTypeArray, sizeof(abbrevTypeArray)); unsigned code2 = (t->Tflags & TFsizeunknown) ? dwarf_abbrev_code(abbrevTypeSubrange2, sizeof(abbrevTypeSubrange2)) : dwarf_abbrev_code(abbrevTypeSubrange, sizeof(abbrevTypeSubrange)); @@ -1581,12 +1587,15 @@ unsigned idxsibling = 0; unsigned siblingoffset; nextidx = dwarf_typidx(t->Tnext); + unsigned code1 = nextidx ? dwarf_abbrev_code(abbrevTypeArray, sizeof(abbrevTypeArray)) + : dwarf_abbrev_code(abbrevTypeArrayVoid, sizeof(abbrevTypeArrayVoid)); idx = infobuf->size(); infobuf->writeuLEB128(code1); // DW_TAG_array_type siblingoffset = infobuf->size(); infobuf->write32(idxsibling); // DW_AT_sibling - infobuf->write32(nextidx); // DW_AT_type + if (nextidx) + infobuf->write32(nextidx); // DW_AT_type infobuf->writeuLEB128(code2); // DW_TAG_subrange_type infobuf->write32(idxbase); // DW_AT_type -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------