summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/unittests/IR/VerifierTest.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2017-01-24 08:32:59 +0000
committerpatrick <patrick@openbsd.org>2017-01-24 08:32:59 +0000
commit53d771aafdbe5b919f264f53cba3788e2c4cffd2 (patch)
tree7eca39498be0ff1e3a6daf583cd9ca5886bb2636 /gnu/llvm/unittests/IR/VerifierTest.cpp
parentIn preparation of compiling our kernels with -ffreestanding, explicitly map (diff)
downloadwireguard-openbsd-53d771aafdbe5b919f264f53cba3788e2c4cffd2.tar.xz
wireguard-openbsd-53d771aafdbe5b919f264f53cba3788e2c4cffd2.zip
Import LLVM 4.0.0 rc1 including clang and lld to help the current
development effort on OpenBSD/arm64.
Diffstat (limited to 'gnu/llvm/unittests/IR/VerifierTest.cpp')
-rw-r--r--gnu/llvm/unittests/IR/VerifierTest.cpp104
1 files changed, 55 insertions, 49 deletions
diff --git a/gnu/llvm/unittests/IR/VerifierTest.cpp b/gnu/llvm/unittests/IR/VerifierTest.cpp
index c33c92a6f7c..ad6940afd05 100644
--- a/gnu/llvm/unittests/IR/VerifierTest.cpp
+++ b/gnu/llvm/unittests/IR/VerifierTest.cpp
@@ -14,6 +14,7 @@
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instructions.h"
+#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
@@ -121,31 +122,6 @@ TEST(VerifierTest, CrossModuleRef) {
F3->eraseFromParent();
}
-TEST(VerifierTest, CrossModuleMetadataRef) {
- LLVMContext C;
- Module M1("M1", C);
- Module M2("M2", C);
- GlobalVariable *newGV =
- new GlobalVariable(M1, Type::getInt8Ty(C), false,
- GlobalVariable::ExternalLinkage, nullptr,
- "Some Global");
-
- DIBuilder dbuilder(M2);
- auto CU = dbuilder.createCompileUnit(dwarf::DW_LANG_Julia, "test.jl", ".",
- "unittest", false, "", 0);
- auto File = dbuilder.createFile("test.jl", ".");
- auto Ty = dbuilder.createBasicType("Int8", 8, 8, dwarf::DW_ATE_signed);
- dbuilder.createGlobalVariable(CU, "_SOME_GLOBAL", "_SOME_GLOBAL", File, 1, Ty,
- false, newGV);
- dbuilder.finalize();
-
- std::string Error;
- raw_string_ostream ErrorOS(Error);
- EXPECT_TRUE(verifyModule(M2, &ErrorOS));
- EXPECT_TRUE(StringRef(ErrorOS.str())
- .startswith("Referencing global in another module!"));
-}
-
TEST(VerifierTest, InvalidVariableLinkage) {
LLVMContext C;
Module M("M", C);
@@ -173,37 +149,67 @@ TEST(VerifierTest, InvalidFunctionLinkage) {
"have external or weak linkage!"));
}
-#ifndef _MSC_VER
-// FIXME: This test causes an ICE in MSVC 2013.
TEST(VerifierTest, StripInvalidDebugInfo) {
- LLVMContext C;
- Module M("M", C);
- DIBuilder DIB(M);
- DIB.createCompileUnit(dwarf::DW_LANG_C89, "broken.c", "/",
- "unittest", false, "", 0);
- DIB.finalize();
- EXPECT_FALSE(verifyModule(M));
-
- // Now break it.
- auto *File = DIB.createFile("not-a-CU.f", ".");
- NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu");
- NMD->addOperand(File);
- EXPECT_TRUE(verifyModule(M));
-
- ModulePassManager MPM(true);
- MPM.addPass(VerifierPass(false));
- ModuleAnalysisManager MAM(true);
- MAM.registerPass([&] { return VerifierAnalysis(); });
- MPM.run(M, MAM);
- EXPECT_FALSE(verifyModule(M));
+ {
+ LLVMContext C;
+ Module M("M", C);
+ DIBuilder DIB(M);
+ DIB.createCompileUnit(dwarf::DW_LANG_C89, DIB.createFile("broken.c", "/"),
+ "unittest", false, "", 0);
+ DIB.finalize();
+ EXPECT_FALSE(verifyModule(M));
+
+ // Now break it by inserting non-CU node to the list of CUs.
+ auto *File = DIB.createFile("not-a-CU.f", ".");
+ NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu");
+ NMD->addOperand(File);
+ EXPECT_TRUE(verifyModule(M));
+
+ ModulePassManager MPM(true);
+ MPM.addPass(VerifierPass(false));
+ ModuleAnalysisManager MAM(true);
+ MAM.registerPass([&] { return VerifierAnalysis(); });
+ MPM.run(M, MAM);
+ EXPECT_FALSE(verifyModule(M));
+ }
+ {
+ LLVMContext C;
+ Module M("M", C);
+ DIBuilder DIB(M);
+ auto *CU = DIB.createCompileUnit(dwarf::DW_LANG_C89,
+ DIB.createFile("broken.c", "/"),
+ "unittest", false, "", 0);
+ new GlobalVariable(M, Type::getInt8Ty(C), false,
+ GlobalValue::ExternalLinkage, nullptr, "g");
+
+ auto *F = cast<Function>(M.getOrInsertFunction(
+ "f", FunctionType::get(Type::getVoidTy(C), false)));
+ IRBuilder<> Builder(BasicBlock::Create(C, "", F));
+ Builder.CreateUnreachable();
+ F->setSubprogram(DIB.createFunction(CU, "f", "f",
+ DIB.createFile("broken.c", "/"), 1,
+ nullptr, true, true, 1));
+ DIB.finalize();
+ EXPECT_FALSE(verifyModule(M));
+
+ // Now break it by not listing the CU at all.
+ M.eraseNamedMetadata(M.getOrInsertNamedMetadata("llvm.dbg.cu"));
+ EXPECT_TRUE(verifyModule(M));
+
+ ModulePassManager MPM(true);
+ MPM.addPass(VerifierPass(false));
+ ModuleAnalysisManager MAM(true);
+ MAM.registerPass([&] { return VerifierAnalysis(); });
+ MPM.run(M, MAM);
+ EXPECT_FALSE(verifyModule(M));
+ }
}
-#endif
TEST(VerifierTest, StripInvalidDebugInfoLegacy) {
LLVMContext C;
Module M("M", C);
DIBuilder DIB(M);
- DIB.createCompileUnit(dwarf::DW_LANG_C89, "broken.c", "/",
+ DIB.createCompileUnit(dwarf::DW_LANG_C89, DIB.createFile("broken.c", "/"),
"unittest", false, "", 0);
DIB.finalize();
EXPECT_FALSE(verifyModule(M));