[Function] Properly remove use when clearing personality
[oota-llvm.git] / unittests / MC / StringTableBuilderTest.cpp
index d30dc6222d23e333a748033c715cd58642106c9c..4cc0bda0a03ac10ffe5ef3f1f8ee8a0abfaf8d68 100644 (file)
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/MC/StringTableBuilder.h"
+#include "llvm/Support/Endian.h"
 #include "gtest/gtest.h"
 #include <string>
 
@@ -15,8 +16,8 @@ using namespace llvm;
 
 namespace {
 
-TEST(StringTableBuilderTest, Basic) {
-  StringTableBuilder B;
+TEST(StringTableBuilderTest, BasicELF) {
+  StringTableBuilder B(StringTableBuilder::ELF);
 
   B.add("foo");
   B.add("bar");
@@ -37,4 +38,34 @@ TEST(StringTableBuilderTest, Basic) {
   EXPECT_EQ(8U, B.getOffset("foo"));
 }
 
+TEST(StringTableBuilderTest, BasicWinCOFF) {
+  StringTableBuilder B(StringTableBuilder::WinCOFF);
+
+  // Strings must be 9 chars or longer to go in the table.
+  B.add("hippopotamus");
+  B.add("pygmy hippopotamus");
+  B.add("river horse");
+
+  B.finalize();
+
+  // size_field + "pygmy hippopotamus\0" + "river horse\0"
+  uint32_t ExpectedSize = 4 + 19 + 12;
+  EXPECT_EQ(ExpectedSize, B.data().size());
+
+  std::string Expected;
+
+  ExpectedSize =
+      support::endian::byte_swap<uint32_t, support::little>(ExpectedSize);
+  Expected.append((const char*)&ExpectedSize, 4);
+  Expected += "pygmy hippopotamus";
+  Expected += '\x00';
+  Expected += "river horse";
+  Expected += '\x00';
+
+  EXPECT_EQ(Expected, B.data());
+  EXPECT_EQ(4U, B.getOffset("pygmy hippopotamus"));
+  EXPECT_EQ(10U, B.getOffset("hippopotamus"));
+  EXPECT_EQ(23U, B.getOffset("river horse"));
+}
+
 }