diff options
| author | 2020-08-03 15:06:44 +0000 | |
|---|---|---|
| committer | 2020-08-03 15:06:44 +0000 | |
| commit | b64793999546ed8adebaeebd9d8345d18db8927d (patch) | |
| tree | 4357c27b561d73b0e089727c6ed659f2ceff5f47 /gnu/llvm/unittests/IR/VerifierTest.cpp | |
| parent | Add support for UTF-8 DISPLAY-HINTs with octet length. For now only (diff) | |
| download | wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.tar.xz wireguard-openbsd-b64793999546ed8adebaeebd9d8345d18db8927d.zip | |
Remove LLVM 8.0.1 files.
Diffstat (limited to 'gnu/llvm/unittests/IR/VerifierTest.cpp')
| -rw-r--r-- | gnu/llvm/unittests/IR/VerifierTest.cpp | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/gnu/llvm/unittests/IR/VerifierTest.cpp b/gnu/llvm/unittests/IR/VerifierTest.cpp deleted file mode 100644 index 53e5d6fbbe4..00000000000 --- a/gnu/llvm/unittests/IR/VerifierTest.cpp +++ /dev/null @@ -1,195 +0,0 @@ -//===- llvm/unittest/IR/VerifierTest.cpp - Verifier unit tests --*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/IR/Verifier.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/DIBuilder.h" -#include "llvm/IR/DerivedTypes.h" -#include "llvm/IR/Function.h" -#include "llvm/IR/GlobalAlias.h" -#include "llvm/IR/GlobalVariable.h" -#include "llvm/IR/IRBuilder.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/LLVMContext.h" -#include "llvm/IR/Module.h" -#include "gtest/gtest.h" - -namespace llvm { -namespace { - -TEST(VerifierTest, Branch_i1) { - LLVMContext C; - Module M("M", C); - FunctionType *FTy = FunctionType::get(Type::getVoidTy(C), /*isVarArg=*/false); - Function *F = cast<Function>(M.getOrInsertFunction("foo", FTy)); - BasicBlock *Entry = BasicBlock::Create(C, "entry", F); - BasicBlock *Exit = BasicBlock::Create(C, "exit", F); - ReturnInst::Create(C, Exit); - - // To avoid triggering an assertion in BranchInst::Create, we first create - // a branch with an 'i1' condition ... - - Constant *False = ConstantInt::getFalse(C); - BranchInst *BI = BranchInst::Create(Exit, Exit, False, Entry); - - // ... then use setOperand to redirect it to a value of different type. - - Constant *Zero32 = ConstantInt::get(IntegerType::get(C, 32), 0); - BI->setOperand(0, Zero32); - - EXPECT_TRUE(verifyFunction(*F)); -} - -TEST(VerifierTest, InvalidRetAttribute) { - LLVMContext C; - Module M("M", C); - FunctionType *FTy = FunctionType::get(Type::getInt32Ty(C), /*isVarArg=*/false); - Function *F = cast<Function>(M.getOrInsertFunction("foo", FTy)); - AttributeList AS = F->getAttributes(); - F->setAttributes( - AS.addAttribute(C, AttributeList::ReturnIndex, Attribute::UWTable)); - - std::string Error; - raw_string_ostream ErrorOS(Error); - EXPECT_TRUE(verifyModule(M, &ErrorOS)); - EXPECT_TRUE(StringRef(ErrorOS.str()).startswith( - "Attribute 'uwtable' only applies to functions!")); -} - -TEST(VerifierTest, CrossModuleRef) { - LLVMContext C; - Module M1("M1", C); - Module M2("M2", C); - Module M3("M3", C); - FunctionType *FTy = FunctionType::get(Type::getInt32Ty(C), /*isVarArg=*/false); - Function *F1 = cast<Function>(M1.getOrInsertFunction("foo1", FTy)); - Function *F2 = cast<Function>(M2.getOrInsertFunction("foo2", FTy)); - Function *F3 = cast<Function>(M3.getOrInsertFunction("foo3", FTy)); - - BasicBlock *Entry1 = BasicBlock::Create(C, "entry", F1); - BasicBlock *Entry3 = BasicBlock::Create(C, "entry", F3); - - // BAD: Referencing function in another module - CallInst::Create(F2,"call",Entry1); - - // BAD: Referencing personality routine in another module - F3->setPersonalityFn(F2); - - // Fill in the body - Constant *ConstZero = ConstantInt::get(Type::getInt32Ty(C), 0); - ReturnInst::Create(C, ConstZero, Entry1); - ReturnInst::Create(C, ConstZero, Entry3); - - std::string Error; - raw_string_ostream ErrorOS(Error); - EXPECT_TRUE(verifyModule(M2, &ErrorOS)); - EXPECT_TRUE(StringRef(ErrorOS.str()) - .equals("Global is used by function in a different module\n" - "i32 ()* @foo2\n" - "; ModuleID = 'M2'\n" - "i32 ()* @foo3\n" - "; ModuleID = 'M3'\n" - "Global is referenced in a different module!\n" - "i32 ()* @foo2\n" - "; ModuleID = 'M2'\n" - " %call = call i32 @foo2()\n" - "i32 ()* @foo1\n" - "; ModuleID = 'M1'\n")); - - Error.clear(); - EXPECT_TRUE(verifyModule(M1, &ErrorOS)); - EXPECT_TRUE(StringRef(ErrorOS.str()).equals( - "Referencing function in another module!\n" - " %call = call i32 @foo2()\n" - "; ModuleID = 'M1'\n" - "i32 ()* @foo2\n" - "; ModuleID = 'M2'\n")); - - Error.clear(); - EXPECT_TRUE(verifyModule(M3, &ErrorOS)); - EXPECT_TRUE(StringRef(ErrorOS.str()).startswith( - "Referencing personality function in another module!")); - - // Erase bad methods to avoid triggering an assertion failure on destruction - F1->eraseFromParent(); - F3->eraseFromParent(); -} - -TEST(VerifierTest, InvalidVariableLinkage) { - LLVMContext C; - Module M("M", C); - new GlobalVariable(M, Type::getInt8Ty(C), false, - GlobalValue::LinkOnceODRLinkage, nullptr, "Some Global"); - std::string Error; - raw_string_ostream ErrorOS(Error); - EXPECT_TRUE(verifyModule(M, &ErrorOS)); - EXPECT_TRUE( - StringRef(ErrorOS.str()).startswith("Global is external, but doesn't " - "have external or weak linkage!")); -} - -TEST(VerifierTest, InvalidFunctionLinkage) { - LLVMContext C; - Module M("M", C); - - FunctionType *FTy = FunctionType::get(Type::getVoidTy(C), /*isVarArg=*/false); - Function::Create(FTy, GlobalValue::LinkOnceODRLinkage, "foo", &M); - std::string Error; - raw_string_ostream ErrorOS(Error); - EXPECT_TRUE(verifyModule(M, &ErrorOS)); - EXPECT_TRUE( - StringRef(ErrorOS.str()).startswith("Global is external, but doesn't " - "have external or weak linkage!")); -} - -TEST(VerifierTest, DetectInvalidDebugInfo) { - { - 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)); - } - { - 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, 1, - DINode::FlagZero, - DISubprogram::SPFlagLocalToUnit | DISubprogram::SPFlagDefinition)); - 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)); - } -} - -} // end anonymous namespace -} // end namespace llvm |
