From: Reid Kleckner Date: Wed, 30 Aug 2017 20:40:36 +0000 (+0000) Subject: [IR] Don't print "!DIExpression() = !DIExpression()" when dumping X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b5b9823dc78c9aa0387fd16fa022f39c3100f7ee;p=llvm [IR] Don't print "!DIExpression() = !DIExpression()" when dumping Now that we print DIExpressions inline everywhere, we don't need to print them once as an operand and again as a value. This is only really visible when calling dump() or print() directly on a DIExpression during debugging. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@312168 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/AsmWriter.cpp b/lib/IR/AsmWriter.cpp index 1cd6dd0ddff..3443c6a3d78 100644 --- a/lib/IR/AsmWriter.cpp +++ b/lib/IR/AsmWriter.cpp @@ -3592,7 +3592,7 @@ static void printMetadataImpl(raw_ostream &ROS, const Metadata &MD, /* FromValue */ true); auto *N = dyn_cast(&MD); - if (OnlyAsOperand || !N) + if (OnlyAsOperand || !N || isa(MD)) return; OS << " = "; diff --git a/unittests/IR/AsmWriterTest.cpp b/unittests/IR/AsmWriterTest.cpp index 55c2a70e21f..9ad55237b5c 100644 --- a/unittests/IR/AsmWriterTest.cpp +++ b/unittests/IR/AsmWriterTest.cpp @@ -6,6 +6,8 @@ // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// +#include "llvm/BinaryFormat/Dwarf.h" +#include "llvm/IR/DebugInfoMetadata.h" #include "llvm/IR/Function.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/LLVMContext.h" @@ -34,4 +36,19 @@ TEST(AsmWriterTest, DebugPrintDetachedInstruction) { EXPECT_TRUE(r != std::string::npos); } +TEST(AsmWriterTest, DumpDIExpression) { + LLVMContext Ctx; + uint64_t Ops[] = { + dwarf::DW_OP_constu, 4, + dwarf::DW_OP_minus, + dwarf::DW_OP_deref, + }; + DIExpression *Expr = DIExpression::get(Ctx, Ops); + std::string S; + raw_string_ostream OS(S); + Expr->print(OS); + EXPECT_EQ("!DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref)", + OS.str()); +} + }