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