[llvm] [NFC][llvm][object][GOFF] cleanup GOFFObjectTests (PR #212286)

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 3 00:21:25 PDT 2026


================
@@ -106,10 +39,86 @@ void constructInvalidGOFF(const char *Data, size_t Size) {
                         "of 80 bytes, but is " +
                         std::to_string(Size) + " bytes"));
 }
+
+class GOFFObjectFileTest : public ::testing::Test {
+protected:
+  std::vector<char> GOFFData;
+  uint8_t RecordCount = 0;
+
+  size_t addNewRecord() {
+    size_t Pos = GOFFData.size();
+    GOFFData.resize(Pos + GOFF::RecordLength);
+    ++RecordCount;
+    return Pos;
+  }
+
+  void addEndRecord() {
+    size_t Pos = addNewRecord();
+    GOFFData[Pos] = (char)0x03;
+    GOFFData[Pos + 1] = (char)0x40; // END record, non-continued.
+    GOFFData[Pos + 11] = (char)RecordCount;
+  }
+
+  void addHdrRecord(uint8_t ArchLevel = 0) {
+    size_t Pos = addNewRecord();
+    GOFFData[Pos] = (char)0x03;
+    GOFFData[Pos + 1] = (char)0xF0; // HDR record, non-continued.
+    GOFFData[Pos + 50] = (char)ArchLevel;
+  }
+
+  void
+  addEsdRecord(uint8_t Type, uint8_t ESDID, const std::vector<uint8_t> &Name,
+               uint8_t ParentESDID = 0, uint8_t BindingScope = 0,
+               uint8_t NameSpaceID = 0, uint8_t AdditionalFlags = 0,
+               std::array<uint8_t, 10> BehavioralAttributes = {0, 0, 0, 0, 0, 0,
+                                                               0, 0, 0, 0},
+               uint32_t Length = 0) {
+    size_t Pos = GOFFData.size();
+    GOFFData.resize(GOFFData.size() + GOFF::RecordLength);
+    ++RecordCount;
+
+    GOFFData[Pos] = (char)0x03;
+    GOFFData[Pos + 3] = (char)Type;
+    GOFFData[Pos + 7] = (char)ESDID;           // ESDID.
+    GOFFData[Pos + 11] = (char)ParentESDID;    // Parent ESDID.
+    GOFFData[Pos + 24] = (char)(Length >> 24); // Length (big-endian).
+    GOFFData[Pos + 25] = (char)(Length >> 16);
+    GOFFData[Pos + 26] = (char)(Length >> 8);
+    GOFFData[Pos + 27] = (char)(Length);
+    GOFFData[Pos + 40] = (char)NameSpaceID;     // Name Space ID
+    GOFFData[Pos + 41] = (char)AdditionalFlags; // Additional Flags
+
+    for (size_t Offset = 0; Offset < 10; Offset++)
+      GOFFData[Pos + 60 + Offset] = (char)BehavioralAttributes[Offset];
+
+    GOFFData[Pos + 71] = (char)(Name.size()); // Size of symbol name.
+    size_t StringOffset = Pos + 72;           // Start of Symbol name
+    for (uint8_t C : Name) {
+      GOFFData[StringOffset] = (char)C;
+      StringOffset++;
----------------
jh7370 wrote:

Either do `GOFFData[StringOffset++] = (char)C;` or do `++StringOffset;` afterwards.

https://llvm.org/docs/CodingStandards.html#prefer-preincrement

https://github.com/llvm/llvm-project/pull/212286


More information about the llvm-commits mailing list