xref: /aosp_15_r20/external/llvm/unittests/IR/AsmWriterTest.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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 Worker TEST(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