Merge remote-tracking branch 'origin/GP-4187_dev747368_fix_golang_slice_packing'

This commit is contained in:
Ryan Kurtz
2024-01-03 11:54:02 -05:00

View File

@@ -52,9 +52,17 @@ public class GoSliceType extends GoType {
@Override
public DataType recoverDataType() throws IOException {
Structure genericSliceDT = programContext.getGenericSliceDT();
StructureDataType sliceDT =
new StructureDataType(programContext.getRecoveredTypesCp(getPackagePathString()),
getUniqueTypename(), 0, programContext.getDTM());
getUniqueTypename(), genericSliceDT.getLength(), programContext.getDTM());
// ensure the sliceDT is filled out before getting the element's data type to ensure
// any other data types pulled in that ref this slice don't change size when trying to
// enable packing
sliceDT.replaceWith(genericSliceDT);
programContext.cacheRecoveredDataType(this, sliceDT);
// fixup the generic void* field with the specific element* type
@@ -62,9 +70,6 @@ public class GoSliceType extends GoType {
DataType elementDT = programContext.getRecoveredType(elementType);
Pointer elementPtrDT = programContext.getDTM().getPointer(elementDT);
Structure genericSliceDT = programContext.getGenericSliceDT();
sliceDT.replaceWith(genericSliceDT);
int arrayPtrComponentIndex = 0; /* HACK, field ordinal of void* data field in slice type */
DataTypeComponent arrayDTC = genericSliceDT.getComponent(arrayPtrComponentIndex);
sliceDT.replace(arrayPtrComponentIndex, elementPtrDT, -1, arrayDTC.getFieldName(),