//===- llvm/unittest/VMCore/VerifierTest.cpp - Verifier 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/Constants.h" #include "llvm/DerivedTypes.h" #include "llvm/Function.h" #include "llvm/Instructions.h" #include "llvm/LLVMContext.h" #include "llvm/ADT/OwningPtr.h" #include "llvm/Analysis/Verifier.h" #include "gtest/gtest.h" namespace llvm { namespace { TEST(VerifierTest, Branch_i1) { LLVMContext &C = getGlobalContext(); FunctionType *FTy = FunctionType::get(Type::getVoidTy(C), /*isVarArg=*/false); OwningPtr F(Function::Create(FTy, GlobalValue::ExternalLinkage)); BasicBlock *Entry = BasicBlock::Create(C, "entry", F.get()); BasicBlock *Exit = BasicBlock::Create(C, "exit", F.get()); 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, ReturnStatusAction)); } } }