diff --git a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj index 40de994a62..2aea289b8d 100644 --- a/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj +++ b/Ghidra/Features/Base/src/main/javacc/ghidra/app/util/cparser/C/C.jj @@ -307,6 +307,8 @@ public class CParser { private DataType addDef(Map table, String name, DataType dt) { // System.out.println("** addDef " + name + " = " + (dt != null ? dt.getName() : " - no type -") ); + lastDataType = dt; + DataType existingDT = table.get(name); if (existingDT != null && dt.isEquivalent(existingDT)) { return existingDT; @@ -426,7 +428,7 @@ public class CParser { hasNoComponents = (dtComp.getNumDefinedComponents() == 0 ? true : false); - hasSameSourceArchive = dt.getSourceArchive().equals(dtMgr.getLocalSourceArchive()); + hasSameSourceArchive = Objects.equals(dt.getSourceArchive(), dtMgr.getLocalSourceArchive()); } // make sure comp is a Composite, if existing dt is empty, in same category and archive diff --git a/Ghidra/Features/Base/src/test/java/ghidra/app/util/cparser/CParserTest.java b/Ghidra/Features/Base/src/test/java/ghidra/app/util/cparser/CParserTest.java index 97a867e30f..2ecc411491 100644 --- a/Ghidra/Features/Base/src/test/java/ghidra/app/util/cparser/CParserTest.java +++ b/Ghidra/Features/Base/src/test/java/ghidra/app/util/cparser/CParserTest.java @@ -51,6 +51,21 @@ public class CParserTest extends AbstractGenericTest { DataType dt = parser.getDataTypeManager().getDataType("/int32_t"); assertTrue(dt != null); assertTrue(dt instanceof TypeDef); + + dt = parser.parse("struct mystruct {" + + " int field1;" + + " char field2;" + + " };"); + + assertTrue(dt != null); + assertTrue(dt instanceof Structure); + Structure sdt = (Structure) dt; + DataTypeComponent comp = sdt.getComponent(0); + assertEquals("field1", comp.getFieldName()); + assertEquals(comp.getDataType().getName(),"int"); + comp = sdt.getComponent(1); + assertEquals("field2", comp.getFieldName()); + assertEquals(comp.getDataType().getName(),"char"); } /**