]> granicus.if.org Git - llvm/commitdiff
[IR] Don't print "!DIExpression() = !DIExpression()" when dumping
authorReid Kleckner <rnk@google.com>
Wed, 30 Aug 2017 20:40:36 +0000 (20:40 +0000)
committerReid Kleckner <rnk@google.com>
Wed, 30 Aug 2017 20:40:36 +0000 (20:40 +0000)
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

lib/IR/AsmWriter.cpp
unittests/IR/AsmWriterTest.cpp

index 1cd6dd0ddff4f96dfa99b08223a0b888f1f33346..3443c6a3d78a319cbda012e81fea60d7b7ea0d63 100644 (file)
@@ -3592,7 +3592,7 @@ static void printMetadataImpl(raw_ostream &ROS, const Metadata &MD,
                          /* FromValue */ true);
 
   auto *N = dyn_cast<MDNode>(&MD);
-  if (OnlyAsOperand || !N)
+  if (OnlyAsOperand || !N || isa<DIExpression>(MD))
     return;
 
   OS << " = ";
index 55c2a70e21f5876f6446b015a4192a7adee6b549..9ad55237b5c0f7a19d0dffd665ef6e5a8667aa43 100644 (file)
@@ -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());
+}
+
 }