[clang] [clang] Implement dump() for MemberPointer APValues (PR #136130)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 17 04:47:23 PDT 2025
https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/136130
Print the member pointer decl and the path.
>From ae8fac6c80a757a5ee3a0fa6e59d7546f71ce116 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Thu, 17 Apr 2025 13:44:50 +0200
Subject: [PATCH] [clang] Implement dump() for MemberPointer APValues
---
clang/lib/AST/TextNodeDumper.cpp | 16 ++++++++++++++--
clang/test/AST/ast-dump-APValue-lvalue.cpp | 18 ++++++++++++++++--
clang/test/AST/ast-dump-APValue-todo.cpp | 22 ----------------------
3 files changed, 30 insertions(+), 26 deletions(-)
delete mode 100644 clang/test/AST/ast-dump-APValue-todo.cpp
diff --git a/clang/lib/AST/TextNodeDumper.cpp b/clang/lib/AST/TextNodeDumper.cpp
index c8b459ee78e6b..89567425f0d5f 100644
--- a/clang/lib/AST/TextNodeDumper.cpp
+++ b/clang/lib/AST/TextNodeDumper.cpp
@@ -829,9 +829,21 @@ void TextNodeDumper::Visit(const APValue &Value, QualType Ty) {
return;
}
- case APValue::MemberPointer:
- OS << "MemberPointer <todo>";
+ case APValue::MemberPointer: {
+ OS << "MemberPointer ";
+ auto Path = Value.getMemberPointerPath();
+ for (const CXXRecordDecl *D : Path) {
+ {
+ ColorScope Color(OS, ShowColors, DeclNameColor);
+ OS << D->getDeclName();
+ }
+ OS << "::";
+ }
+
+ ColorScope Color(OS, ShowColors, DeclNameColor);
+ OS << Value.getMemberPointerDecl()->getDeclName();
return;
+ }
case APValue::AddrLabelDiff:
OS << "AddrLabelDiff <todo>";
return;
diff --git a/clang/test/AST/ast-dump-APValue-lvalue.cpp b/clang/test/AST/ast-dump-APValue-lvalue.cpp
index 333f7aa419377..51d22a5ba8b6d 100644
--- a/clang/test/AST/ast-dump-APValue-lvalue.cpp
+++ b/clang/test/AST/ast-dump-APValue-lvalue.cpp
@@ -27,6 +27,16 @@ namespace std {
class type_info;
}
+struct P {
+ int x;
+};
+struct Q {
+ float m;
+};
+struct MP : P, Q {
+ int i;
+};
+
void Test(int (&arr)[10]) {
constexpr int *pi = &i;
// CHECK: | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pi 'int *const' constexpr cinit
@@ -53,6 +63,10 @@ void Test(int (&arr)[10]) {
// CHECK-NEXT: | |-value: LValue Base=null, Null=1, Offset=0, HasPath=1, PathLength=0, Path=()
constexpr const std::type_info* pti = &typeid(int);
- // CHECK: `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pti 'const std::type_info *const' constexpr cinit
- // CHECK-NEXT: |-value: LValue Base=TypeInfoLValue typeid(int), Null=0, Offset=0, HasPath=1, PathLength=0, Path=()
+ // CHECK: | `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pti 'const std::type_info *const' constexpr cinit
+ // CHECK-NEXT: | |-value: LValue Base=TypeInfoLValue typeid(int), Null=0, Offset=0, HasPath=1, PathLength=0, Path=()
+
+ constexpr int(MP::*pmi) = (int MP::*)&P::x;
+ // CHECK: `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pmi 'int (MP::*const)' constexpr cinit
+ // CHECK-NEXT: |-value: MemberPointer MP::x
}
diff --git a/clang/test/AST/ast-dump-APValue-todo.cpp b/clang/test/AST/ast-dump-APValue-todo.cpp
deleted file mode 100644
index acaa82ba53b6f..0000000000000
--- a/clang/test/AST/ast-dump-APValue-todo.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-// Test without serialization:
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \
-// RUN: -ast-dump %s -ast-dump-filter Test \
-// RUN: | FileCheck --strict-whitespace --match-full-lines %s
-//
-// Test with serialization:
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 -emit-pch -o %t %s
-// RUN: %clang_cc1 -x c++ -triple x86_64-unknown-unknown -Wno-unused-value -std=gnu++17 \
-// RUN: -include-pch %t -ast-dump-all -ast-dump-filter Test /dev/null \
-// RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \
-// RUN: | FileCheck --strict-whitespace --match-full-lines %s
-
-int i;
-struct S {
- int i;
-};
-
-void Test() {
- constexpr int(S::*pmi) = &S::i;
- // CHECK: `-VarDecl {{.*}} <col:{{.*}}, col:{{.*}}> col:{{.*}} pmi 'int (S::*const)' constexpr cinit
- // CHECK-NEXT: |-value: MemberPointer <todo>
-}
More information about the cfe-commits
mailing list