From fb4869e26c80dfc15d44d2c992f1958a1214d183 Mon Sep 17 00:00:00 2001
From: Christian Sigg <csigg@google.com>
Date: Fri, 7 Jan 2022 22:44:41 +0100
Subject: [PATCH] Fix GDB printers test

- Prevent symbols from being stripped so that it can run with 'RelWithDebInfo'.
- Adjust llvm-support CHECKs after code changes.
- Polish mlir-support CHECKs as suggested in https://reviews.llvm.org/D116646.

Differential Revision: https://reviews.llvm.org/D116837
---
 .../llvm-prettyprinters/gdb/llvm-support.cpp  | 19 ++--
 .../llvm-prettyprinters/gdb/llvm-support.gdb  |  8 +-
 .../llvm-prettyprinters/gdb/mlir-support.cpp  | 10 +-
 .../llvm-prettyprinters/gdb/mlir-support.gdb  | 91 ++++++++++---------
 4 files changed, 71 insertions(+), 57 deletions(-)

diff --git a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.cpp b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.cpp
index 07a1a954c4e2..9d08582c45e9 100644
--- a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.cpp
+++ b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.cpp
@@ -61,12 +61,15 @@ auto SimpleIlist = []() {
 }();
 
 int main() {
-  // Reference symbols that might otherwise be stripped.
-  ArrayRef[0];
-  MutableArrayRef[0];
-  (void)!ExpectedValue;
-  (void)!ExpectedError;
-  *OptionalValue;
-  *OptionalNone;
-  return 0;
+  std::uintptr_t result = 0;
+  auto dont_strip = [&](const auto &val) {
+    result += reinterpret_cast<std::uintptr_t>(&val);
+  };
+  dont_strip(ArrayRef);
+  dont_strip(MutableArrayRef);
+  dont_strip(ExpectedValue);
+  dont_strip(ExpectedError);
+  dont_strip(OptionalValue);
+  dont_strip(OptionalNone);
+  return result; // Non-zero return value is OK.
 }
diff --git a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
index bf7ec5a47f86..eafac583d9f5 100644
--- a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
+++ b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/llvm-support.gdb
@@ -64,7 +64,7 @@ set print pretty
 # CHECK:     },
 # CHECK:     <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
 # CHECK:       prev = [[Node_14]],
-# CHECK:       next = [[SimpleIlist_Sentinel:0x.*]] <SimpleIlist>
+# CHECK:       next = [[SimpleIlist_Sentinel:0x.*]] <completed>
 # CHECK:     },
 # CHECK:     members of IlistNode:
 # CHECK:     Value = 13
@@ -87,7 +87,7 @@ set print pretty
 # CHECK:       next = [[Ilist_Sentinel]] <Ilist>
 # CHECK:     },
 # CHECK:     <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
-# CHECK:       prev = [[SimpleIlist_Sentinel]] <SimpleIlist>,
+# CHECK:       prev = [[SimpleIlist_Sentinel]] <completed>,
 # CHECK:       next = [[Node_14]]
 # CHECK:     },
 # CHECK:     members of IlistNode:
@@ -103,7 +103,7 @@ p Ilist
 # CHECK:       next = [[Ilist_Sentinel]] <Ilist>
 # CHECK:     },
 # CHECK:     <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
-# CHECK:       prev = [[SimpleIlist_Sentinel]] <SimpleIlist>,
+# CHECK:       prev = [[SimpleIlist_Sentinel]] <completed>,
 # CHECK:       next = [[Node_14]]
 # CHECK:     },
 # CHECK:     members of IlistNode:
@@ -128,7 +128,7 @@ p Ilist
 # CHECK:     },
 # CHECK:     <llvm::ilist_node<IlistNode, llvm::ilist_tag<B> >> = {
 # CHECK:       prev = [[Node_14]],
-# CHECK:       next = [[SimpleIlist_Sentinel]] <SimpleIlist>
+# CHECK:       next = [[SimpleIlist_Sentinel]] <completed>
 # CHECK:     },
 # CHECK:     members of IlistNode:
 # CHECK:     Value = 13
diff --git a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.cpp b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.cpp
index 28a5cc9cdf1f..e3440b5be09a 100644
--- a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.cpp
+++ b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.cpp
@@ -41,4 +41,12 @@ mlir::Attribute StringAttr = mlir::StringAttr::get(&Context, "foo");
 mlir::Attribute ElementsAttr = mlir::DenseElementsAttr::get(
     VectorType.cast<mlir::ShapedType>(), llvm::ArrayRef<float>{2.0f, 3.0f});
 
-int main() { return 0; }
+int main() {
+  // Reference symbols that might otherwise be stripped.
+  std::uintptr_t result = 0;
+  auto dont_strip = [&](const auto &val) {
+    result += reinterpret_cast<std::uintptr_t>(&val);
+  };
+  dont_strip(Value);
+  return result; // Non-zero return value is OK.
+}
diff --git a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.gdb b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.gdb
index de6b5f1e580e..269c24c83ee7 100644
--- a/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.gdb
+++ b/cross-project-tests/debuginfo-tests/llvm-prettyprinters/gdb/mlir-support.gdb
@@ -24,121 +24,124 @@ print Type
 
 # CHECK-LABEL: +print IndexType
 print IndexType
-# CHECK: mlir::IndexType
+# CHECK: typeID = mlir::TypeID::get<mlir::IndexType>()
 
 # CHECK-LABEL: +print IntegerType
 print IntegerType
-# CHECK: mlir::IntegerType
-# CHECK: width = 3
-# CHECK: Unsigned
+# CHECK: typeID = mlir::TypeID::get<mlir::IntegerType>()
+# CHECK: members of mlir::detail::IntegerTypeStorage
 
 # CHECK-LABEL: +print FloatType
 print FloatType
-# CHECK: mlir::Float32Type
+# CHECK: typeID = mlir::TypeID::get<mlir::Float32Type>()
 
 # CHECK-LABEL: +print MemRefType
 print MemRefType
-# CHECK: mlir::MemRefType
-# CHECK: shape = llvm::ArrayRef of length 2 = {4, 5}
-# CHECK: elementType
-# CHECK: mlir::Float32Type
+# CHECK: typeID = mlir::TypeID::get<mlir::MemRefType>()
+# CHECK: members of mlir::detail::MemRefTypeStorage
 
 # CHECK-LABEL: +print UnrankedMemRefType
 print UnrankedMemRefType
-# CHECK: mlir::UnrankedMemRefType
-# CHECK: elementType
-# CHECK: mlir::IntegerType
-# CHECK: memorySpace
-# CHECK: 6
+# CHECK: typeID = mlir::TypeID::get<mlir::UnrankedMemRefType>()
+# CHECK: members of mlir::detail::UnrankedMemRefTypeStorage
 
 # CHECK-LABEL: +print VectorType
 print VectorType
-# CHECK: mlir::VectorType
-# CHECK: shape = llvm::ArrayRef of length 2 = {1, 2}
+# CHECK: typeID = mlir::TypeID::get<mlir::VectorType>()
+# CHECK: members of mlir::detail::VectorTypeStorage
 
 # CHECK-LABEL: +print TupleType
 print TupleType
-# CHECK: mlir::TupleType
-# CHECK: numElements = 2
+# CHECK: typeID = mlir::TypeID::get<mlir::TupleType>()
 # CHECK: elements[0]
-# CHECK: mlir::IndexType
+# CHECK-NEXT: typeID = mlir::TypeID::get<mlir::IndexType>()
 # CHECK: elements[1]
-# CHECK: mlir::Float32Type
+# CHECK-NEXT: typeID = mlir::TypeID::get<mlir::Float32Type>()
 
 # CHECK-LABEL: +print Result
 print Result
-# CHECK: mlir::Float32Type
+# CHECK: typeID = mlir::TypeID::get<mlir::Float32Type>()
 # CHECK: outOfLineIndex = 42
 
 # CHECK-LABEL: +print Value
 print Value
-# CHECK: OutOfLineOpResult
+# CHECK: typeID = mlir::TypeID::get<mlir::Float32Type>()
+# CHECK: mlir::detail::ValueImpl::Kind::OutOfLineOpResult
 
 # CHECK-LABEL: +print UnknownLoc
 print UnknownLoc
-# CHECK: mlir::UnknownLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::UnknownLoc>()
 
 # CHECK-LABEL: +print FileLineColLoc
 print FileLineColLoc
-# CHECK: mlir::FileLineColLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::FileLineColLoc>()
+# CHECK: members of mlir::detail::FileLineColLocAttrStorage
 # CHECK: "file"
 # CHECK: line = 7
 # CHECK: column = 8
 
 # CHECK-LABEL: +print OpaqueLoc
 print OpaqueLoc
-# CHECK: mlir::OpaqueLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::OpaqueLoc>()
+# CHECK: members of mlir::detail::OpaqueLocAttrStorage
 # CHECK: underlyingLocation = 9
 
 # CHECK-LABEL: +print NameLoc
 print NameLoc
-# CHECK: mlir::NameLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::NameLoc>()
+# CHECK: members of mlir::detail::NameLocAttrStorage
 # CHECK: "foo"
-# CHECK: mlir::UnknownLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::UnknownLoc>()
 
 # CHECK-LABEL: +print CallSiteLoc
 print CallSiteLoc
-# CHECK: mlir::CallSiteLoc
-# CHECK: callee
-# CHECK: mlir::FileLineColLoc
-# CHECK: caller
-# CHECK: mlir::OpaqueLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::CallSiteLoc>()
+# CHECK: members of mlir::detail::CallSiteLocAttrStorage
+# CHECK: typeID = mlir::TypeID::get<mlir::FileLineColLoc>()
+# CHECK: typeID = mlir::TypeID::get<mlir::OpaqueLoc>()
 
 # CHECK-LABEL: +print FusedLoc
 print FusedLoc
-# CHECK: mlir::FusedLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::FusedLoc>()
+# CHECK: members of mlir::detail::FusedLocAttrStorage
 # CHECK: locations = llvm::ArrayRef of length 2
-# CHECK: mlir::FileLineColLoc
-# CHECK: mlir::NameLoc
+# CHECK: typeID = mlir::TypeID::get<mlir::FileLineColLoc>()
+# CHECK: typeID = mlir::TypeID::get<mlir::NameLoc>()
 
 # CHECK-LABEL: +print UnitAttr
 print UnitAttr
-# CHECK: mlir::UnitAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::UnitAttr>()
 
 # CHECK-LABEL: +print FloatAttr
 print FloatAttr
-# CHECK: mlir::FloatAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::FloatAttr>()
+# CHECK: members of mlir::detail::FloatAttrStorage
 
 # CHECK-LABEL: +print IntegerAttr
 print IntegerAttr
-# CHECK: mlir::IntegerAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::IntegerAttr>()
+# CHECK: members of mlir::detail::IntegerAttrStorage
 
 # CHECK-LABEL: +print TypeAttr
 print TypeAttr
-# CHECK: mlir::TypeAttr
-# CHECK: mlir::IndexType
+# CHECK: typeID = mlir::TypeID::get<mlir::TypeAttr>()
+# CHECK: members of mlir::detail::TypeAttrStorage
+# CHECK: typeID = mlir::TypeID::get<mlir::IndexType>()
 
 # CHECK-LABEL: +print ArrayAttr
 print ArrayAttr
-# CHECK: mlir::ArrayAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::ArrayAttr>()
+# CHECK: members of mlir::detail::ArrayAttrStorage
 # CHECK: llvm::ArrayRef of length 1
-# CHECK: mlir::UnitAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::UnitAttr>()
 
 # CHECK-LABEL: +print StringAttr
 print StringAttr
-# CHECK: mlir::StringAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::StringAttr>()
+# CHECK: members of mlir::detail::StringAttrStorage
 # CHECK: value = "foo"
 
 # CHECK-LABEL: +print ElementsAttr
 print ElementsAttr
-# CHECK: mlir::DenseIntOrFPElementsAttr
+# CHECK: typeID = mlir::TypeID::get<mlir::DenseIntOrFPElementsAttr>()
+# CHECK: members of mlir::detail::DenseIntOrFPElementsAttrStorage
-- 
GitLab