diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/AbstractComplexTypeApplier.java b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/AbstractComplexTypeApplier.java index 5273bc3643..82660bf418 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/AbstractComplexTypeApplier.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/AbstractComplexTypeApplier.java @@ -59,6 +59,10 @@ public abstract class AbstractComplexTypeApplier extends MsTypeApplier { return ((AbstractComplexMsType) msType).getMsProperty().isForwardReference(); } + boolean isNested() { + return ((AbstractComplexMsType) msType).getMsProperty().isNestedClass(); + } + boolean isFinal() { return ((AbstractComplexMsType) msType).getMsProperty().isSealed(); } diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java index fa25c1540a..d6ce649244 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/pdbapplicator/CompositeTypeApplier.java @@ -135,7 +135,15 @@ public class CompositeTypeApplier extends AbstractComplexTypeApplier { @Override void resolve() { - if (!isForwardReference()) { + + // NOTE: Until we know better we do not want to explicitly + // apply nested composite datatypes and allow them to be + // created as-needed (e.g., function definition). This is + // done to minimize duplication of anonymous/unnamed nested + // composites since the parent composite reconsruction performed + // by DefaultCompisiteMember will generate such nested composites. + + if (!isForwardReference() && !isNested()) { super.resolve(); } }