[llvm] r214556 - Rewrite BitReaderTest, NFC

Duncan P. N. Exon Smith dexonsmith at apple.com
Fri Aug 1 14:01:05 PDT 2014


Author: dexonsmith
Date: Fri Aug  1 16:01:04 2014
New Revision: 214556

URL: http://llvm.org/viewvc/llvm-project?rev=214556&view=rev
Log:
Rewrite BitReaderTest, NFC

Rewrite the single unit test in `BitReaderTest` so that it's easier to
add more tests.

  - Parse from an assembly string rather than using API.
  - Use more helper functions.
  - Use a separate context for the module on the other side.

Aside from relying on the assembly parser, there's no functionality
change intended.

Modified:
    llvm/trunk/unittests/Bitcode/BitReaderTest.cpp
    llvm/trunk/unittests/Bitcode/CMakeLists.txt

Modified: llvm/trunk/unittests/Bitcode/BitReaderTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Bitcode/BitReaderTest.cpp?rev=214556&r1=214555&r2=214556&view=diff
==============================================================================
--- llvm/trunk/unittests/Bitcode/BitReaderTest.cpp (original)
+++ llvm/trunk/unittests/Bitcode/BitReaderTest.cpp Fri Aug  1 16:01:04 2014
@@ -10,58 +10,66 @@
 #include "llvm/ADT/SmallString.h"
 #include "llvm/Bitcode/BitstreamWriter.h"
 #include "llvm/Bitcode/ReaderWriter.h"
+#include "llvm/AsmParser/Parser.h"
 #include "llvm/IR/Constants.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/Module.h"
 #include "llvm/IR/Verifier.h"
-#include "llvm/PassManager.h"
+#include "llvm/Support/Debug.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/SourceMgr.h"
 #include "gtest/gtest.h"
 
-namespace llvm {
+using namespace llvm;
+
 namespace {
 
-static Module *makeLLVMModule() {
-  Module* Mod = new Module("test-mem", getGlobalContext());
+std::unique_ptr<Module> parseAssembly(const char *Assembly) {
+  auto M = make_unique<Module>("Module", getGlobalContext());
 
-  FunctionType* FuncTy =
-    FunctionType::get(Type::getVoidTy(Mod->getContext()), false);
-  Function* Func = Function::Create(FuncTy,GlobalValue::ExternalLinkage,
-                                    "func", Mod);
-
-  BasicBlock* Entry = BasicBlock::Create(Mod->getContext(), "entry", Func);
-  new UnreachableInst(Mod->getContext(), Entry);
-
-  BasicBlock* BB = BasicBlock::Create(Mod->getContext(), "bb", Func);
-  new UnreachableInst(Mod->getContext(), BB);
-
-  PointerType* Int8Ptr = Type::getInt8PtrTy(Mod->getContext());
-  new GlobalVariable(*Mod, Int8Ptr, /*isConstant=*/true,
-                     GlobalValue::ExternalLinkage,
-                     BlockAddress::get(BB), "table");
+  SMDiagnostic Error;
+  bool Parsed =
+      ParseAssemblyString(Assembly, M.get(), Error, M->getContext()) == M.get();
+
+  std::string ErrMsg;
+  raw_string_ostream OS(ErrMsg);
+  Error.print("", OS);
+
+  // A failure here means that the test itself is buggy.
+  if (!Parsed)
+    report_fatal_error(OS.str().c_str());
 
-  return Mod;
+  return M;
 }
 
-static void writeModuleToBuffer(SmallVectorImpl<char> &Buffer) {
-  std::unique_ptr<Module> Mod(makeLLVMModule());
+static void writeModuleToBuffer(std::unique_ptr<Module> Mod,
+                                SmallVectorImpl<char> &Buffer) {
   raw_svector_ostream OS(Buffer);
   WriteBitcodeToFile(Mod.get(), OS);
 }
 
-TEST(BitReaderTest, MaterializeFunctionsForBlockAddr) { // PR11677
-  SmallString<1024> Mem;
-  writeModuleToBuffer(Mem);
+static std::unique_ptr<Module> getLazyModuleFromAssembly(LLVMContext &Context,
+                                                         SmallString<1024> &Mem,
+                                                         const char *Assembly) {
+  writeModuleToBuffer(parseAssembly(Assembly), Mem);
   MemoryBuffer *Buffer = MemoryBuffer::getMemBuffer(Mem.str(), "test", false);
-  ErrorOr<Module *> ModuleOrErr =
-      getLazyBitcodeModule(Buffer, getGlobalContext());
-  std::unique_ptr<Module> m(ModuleOrErr.get());
-  PassManager passes;
-  passes.add(createVerifierPass());
-  passes.add(createDebugInfoVerifierPass());
-  passes.run(*m);
+  ErrorOr<Module *> ModuleOrErr = getLazyBitcodeModule(Buffer, Context);
+  return std::unique_ptr<Module>(ModuleOrErr.get());
 }
 
+TEST(BitReaderTest, MaterializeFunctionsForBlockAddr) { // PR11677
+  SmallString<1024> Mem;
+
+  LLVMContext Context;
+  std::unique_ptr<Module> M = getLazyModuleFromAssembly(
+      Context, Mem, "@table = constant i8* blockaddress(@func, %bb)\n"
+                    "define void @func() {\n"
+                    "  unreachable\n"
+                    "bb:\n"
+                    "  unreachable\n"
+                    "}\n");
+  EXPECT_FALSE(verifyModule(*M, &dbgs()));
 }
-}
+
+} // end namespace

Modified: llvm/trunk/unittests/Bitcode/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Bitcode/CMakeLists.txt?rev=214556&r1=214555&r2=214556&view=diff
==============================================================================
--- llvm/trunk/unittests/Bitcode/CMakeLists.txt (original)
+++ llvm/trunk/unittests/Bitcode/CMakeLists.txt Fri Aug  1 16:01:04 2014
@@ -1,5 +1,5 @@
 set(LLVM_LINK_COMPONENTS
-  BitReader
+  IRReader
   BitWriter
   Core
   Support





More information about the llvm-commits mailing list