1*9880d681SAndroid Build Coastguard Worker //===- llvm/unittest/IR/AsmWriter.cpp - AsmWriter tests -------------------===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/IRBuilder.h" 10*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Function.h" 11*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/LLVMContext.h" 12*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/MDBuilder.h" 13*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Module.h" 14*9880d681SAndroid Build Coastguard Worker #include "gtest/gtest.h" 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker using namespace llvm; 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker namespace { 19*9880d681SAndroid Build Coastguard Worker TEST(AsmWriterTest,DebugPrintDetachedInstruction)20*9880d681SAndroid Build Coastguard WorkerTEST(AsmWriterTest, DebugPrintDetachedInstruction) { 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker // PR24852: Ensure that an instruction can be printed even when it 23*9880d681SAndroid Build Coastguard Worker // has metadata attached but no parent. 24*9880d681SAndroid Build Coastguard Worker LLVMContext Ctx; 25*9880d681SAndroid Build Coastguard Worker auto Ty = Type::getInt32Ty(Ctx); 26*9880d681SAndroid Build Coastguard Worker auto Undef = UndefValue::get(Ty); 27*9880d681SAndroid Build Coastguard Worker std::unique_ptr<BinaryOperator> Add(BinaryOperator::CreateAdd(Undef, Undef)); 28*9880d681SAndroid Build Coastguard Worker Add->setMetadata( 29*9880d681SAndroid Build Coastguard Worker "", MDNode::get(Ctx, {ConstantAsMetadata::get(ConstantInt::get(Ty, 1))})); 30*9880d681SAndroid Build Coastguard Worker std::string S; 31*9880d681SAndroid Build Coastguard Worker raw_string_ostream OS(S); 32*9880d681SAndroid Build Coastguard Worker Add->print(OS); 33*9880d681SAndroid Build Coastguard Worker std::size_t r = OS.str().find("<badref> = add i32 undef, undef, !<empty"); 34*9880d681SAndroid Build Coastguard Worker EXPECT_TRUE(r != std::string::npos); 35*9880d681SAndroid Build Coastguard Worker } 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker } 38