Fix MCDataAtom never calling remap when adding data.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 16 Oct 2013 18:26:16 +0000 (18:26 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 16 Oct 2013 18:26:16 +0000 (18:26 +0000)
This patch fixes a small mistake in MCDataAtom::addData() where it doesn't ever
call remap():

-  if (Data.size() > Begin - End - 1)
+  if (Data.size() > End + 1 - Begin)
     remap(Begin, End + 1);

This is currently not visible because of another bug is the disassembler, so
the patch includes a unit test.

Patch by Stephen Checkoway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192823 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/MC/MCAtom.h
lib/MC/MCAtom.cpp
unittests/CMakeLists.txt
unittests/MC/CMakeLists.txt [new file with mode: 0644]
unittests/MC/MCAtomTest.cpp [new file with mode: 0644]
unittests/MC/Makefile [new file with mode: 0644]
unittests/Makefile

index 686f8e11584dfe685310671466e8ca047364e074..4758588ac37e40a9da22f60e6ca5c0b88ce2715c 100644 (file)
@@ -188,7 +188,9 @@ private:
   friend class MCModule;
   // Private constructor - only callable by MCModule
   MCDataAtom(MCModule *P, uint64_t Begin, uint64_t End)
-    : MCAtom(DataAtom, P, Begin, End), Data(End - Begin) {}
+    : MCAtom(DataAtom, P, Begin, End) {
+    Data.reserve(End + 1 - Begin);
+  }
 };
 
 }
index 651028950e752238ae4baf05cc78fcfff4afb6dd..d0a64c300843f976e0bd0ac8a4f8486a9b64a947 100644 (file)
@@ -44,7 +44,7 @@ void MCAtom::remapForSplit(uint64_t SplitPt,
 
 void MCDataAtom::addData(const MCData &D) {
   Data.push_back(D);
-  if (Data.size() > Begin - End - 1)
+  if (Data.size() > End + 1 - Begin)
     remap(Begin, End + 1);
 }
 
index 3bfe9c0aff25362c303757c7611456ad58283c28..52702ba23aac616060784a4bc286c0edaddd3bc7 100644 (file)
@@ -12,6 +12,7 @@ add_subdirectory(CodeGen)
 add_subdirectory(DebugInfo)
 add_subdirectory(ExecutionEngine)
 add_subdirectory(IR)
+add_subdirectory(MC)
 add_subdirectory(Object)
 add_subdirectory(Option)
 add_subdirectory(Support)
diff --git a/unittests/MC/CMakeLists.txt b/unittests/MC/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0e4782c
--- /dev/null
@@ -0,0 +1,11 @@
+set(LLVM_LINK_COMPONENTS
+  MC
+  )
+
+set(MCSources
+  MCAtomTest.cpp
+  )
+
+add_llvm_unittest(MCTests
+  ${MCSources}
+  )
diff --git a/unittests/MC/MCAtomTest.cpp b/unittests/MC/MCAtomTest.cpp
new file mode 100644 (file)
index 0000000..17b056c
--- /dev/null
@@ -0,0 +1,31 @@
+//===- llvm/unittest/MC/MCAtomTest.cpp - Instructions unit tests ----------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/MC/MCAtom.h"
+#include "llvm/MC/MCModule.h"
+#include "gtest/gtest.h"
+
+namespace llvm {
+namespace {
+
+TEST(MCAtomTest, MCDataSize) {
+  MCModule M;
+  MCDataAtom *Atom = M.createDataAtom(0, 0);
+  EXPECT_EQ(uint64_t(0), Atom->getEndAddr());
+  Atom->addData(0);
+  EXPECT_EQ(uint64_t(0), Atom->getEndAddr());
+  Atom->addData(1);
+  EXPECT_EQ(uint64_t(1), Atom->getEndAddr());
+  Atom->addData(2);
+  EXPECT_EQ(uint64_t(2), Atom->getEndAddr());
+  EXPECT_EQ(size_t(3), Atom->getData().size());
+}
+
+}  // end anonymous namespace
+}  // end namespace llvm
diff --git a/unittests/MC/Makefile b/unittests/MC/Makefile
new file mode 100644 (file)
index 0000000..4c25697
--- /dev/null
@@ -0,0 +1,15 @@
+##===- unittests/IR/Makefile -------------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = ../..
+TESTNAME = MC
+LINK_COMPONENTS := MC
+
+include $(LEVEL)/Makefile.config
+include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
index 4ba11793651d5d4128042afdc007932012c78daa..06ba93243e38557f395035825aaf41fce5ea9550 100644 (file)
@@ -10,7 +10,7 @@
 LEVEL = ..
 
 PARALLEL_DIRS = ADT Analysis Bitcode CodeGen DebugInfo ExecutionEngine IR \
-               Object Option Support Transforms
+               MC Object Option Support Transforms
 
 include $(LEVEL)/Makefile.common