Add GDB pretty printers for llvm::ilist, llvm::simple_ilist, and llvm::ilist_node.
Reviewers: dblaikie
Reviewed By: dblaikie
Subscribers: merge_guards_bot, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D72589
GitOrigin-RevId: a03ec58da60c044dc3be7cbb0fcd7912769b05ef
diff --git a/llvm-prettyprinters/gdb/prettyprinters.cpp b/llvm-prettyprinters/gdb/prettyprinters.cpp
index bb0e02d..ed556ec 100644
--- a/llvm-prettyprinters/gdb/prettyprinters.cpp
+++ b/llvm-prettyprinters/gdb/prettyprinters.cpp
@@ -6,6 +6,7 @@
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Twine.h"
+#include "llvm/ADT/ilist.h"
#include "llvm/Support/Error.h"
int Array[] = {1, 2, 3};
@@ -25,4 +26,25 @@
llvm::PointerIntPair<int *, 1> PointerIntPair(IntPtr, 1);
llvm::PointerUnion<float *, int *> PointerUnion(IntPtr);
+using IlistTag = llvm::ilist_tag<struct A>;
+using SimpleIlistTag = llvm::ilist_tag<struct B>;
+struct IlistNode : llvm::ilist_node<IlistNode, IlistTag>,
+ llvm::ilist_node<IlistNode, SimpleIlistTag> {
+ int Value;
+};
+auto Ilist = [] {
+ llvm::ilist<IlistNode, IlistTag> Result;
+ for (int I : {13, 14, 15}) {
+ Result.push_back(new IlistNode);
+ Result.back().Value = I;
+ }
+ return Result;
+}();
+auto SimpleIlist = []() {
+ llvm::simple_ilist<IlistNode, SimpleIlistTag> Result;
+ for (auto &Node : Ilist)
+ Result.push_front(Node);
+ return Result;
+}();
+
int main() { return 0; }
diff --git a/llvm-prettyprinters/gdb/prettyprinters.gdb b/llvm-prettyprinters/gdb/prettyprinters.gdb
index d6e8164..12baa6e 100644
--- a/llvm-prettyprinters/gdb/prettyprinters.gdb
+++ b/llvm-prettyprinters/gdb/prettyprinters.gdb
@@ -45,4 +45,85 @@
# CHECK: llvm::PointerUnion containing int * = {pointer = 0xabc}
p PointerUnion
+# Switch to print pretty adds newlines to the following statements.
+set print pretty
+# CHECK: {
+# CHECK: [0] = {
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<A> >> = {
+# CHECK: prev = [[Ilist_Sentinel:0x.*]] <Ilist>,
+# CHECK: next = [[Node_14:0x.*]]
+# CHECK: },
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
+# CHECK: prev = [[Node_14]],
+# CHECK: next = [[SimpleIlist_Sentinel:0x.*]] <SimpleIlist>
+# CHECK: },
+# CHECK: members of IlistNode:
+# CHECK: Value = 13
+# CHECK: },
+# CHECK: [1] = {
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<A> >> = {
+# CHECK: prev = [[Node_13:0x.*]],
+# CHECK: next = [[Node_15:0x.*]]
+# CHECK: },
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
+# CHECK: prev = [[Node_15]],
+# CHECK: next = [[Node_13]]
+# CHECK: },
+# CHECK: members of IlistNode:
+# CHECK: Value = 14
+# CHECK: },
+# CHECK: [2] = {
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<A> >> = {
+# CHECK: prev = [[Node_14]],
+# CHECK: next = [[Ilist_Sentinel]] <Ilist>
+# CHECK: },
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
+# CHECK: prev = [[SimpleIlist_Sentinel]] <SimpleIlist>,
+# CHECK: next = [[Node_14]]
+# CHECK: },
+# CHECK: members of IlistNode:
+# CHECK: Value = 15
+# CHECK: }
+# CHECK: }
+p Ilist
+
+# CHECK: {
+# CHECK: [0] = {
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<A> >> = {
+# CHECK: prev = [[Node_14]],
+# CHECK: next = [[Ilist_Sentinel]] <Ilist>
+# CHECK: },
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
+# CHECK: prev = [[SimpleIlist_Sentinel]] <SimpleIlist>,
+# CHECK: next = [[Node_14]]
+# CHECK: },
+# CHECK: members of IlistNode:
+# CHECK: Value = 15
+# CHECK: },
+# CHECK: [1] = {
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<A> >> = {
+# CHECK: prev = [[Node_13]],
+# CHECK: next = [[Node_15]]
+# CHECK: },
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
+# CHECK: prev = [[Node_15]],
+# CHECK: next = [[Node_13]]
+# CHECK: },
+# CHECK: members of IlistNode:
+# CHECK: Value = 14
+# CHECK: },
+# CHECK: [2] = {
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<A> >> = {
+# CHECK: prev = [[Ilist_Sentinel]] <Ilist>,
+# CHECK: next = [[Node_14]]
+# CHECK: },
+# CHECK: <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
+# CHECK: prev = [[Node_14]],
+# CHECK: next = [[SimpleIlist_Sentinel]] <SimpleIlist>
+# CHECK: },
+# CHECK: members of IlistNode:
+# CHECK: Value = 13
+# CHECK: }
+# CHECK: }
+p SimpleIlist