[clang] [clang] WIP: Fix MemberPointer serialization non-determinism (PR #135434)

Matheus Izvekov via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 11 13:18:53 PDT 2025


https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/135434

This fixes a problem originally reported here:
https://github.com/llvm/llvm-project/pull/132401#issuecomment-2795078260

This makes sure we only serialize the class declaration when its strictly needed, and canonicalizes it, so it doesn't change in ways that don't round trip.

There are no release notes, since this regression was never released.

>From 04130f259ba19db0ac64baf01a773bffdcf8164d Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov at gmail.com>
Date: Fri, 11 Apr 2025 17:13:53 -0300
Subject: [PATCH] [clang] WIP: Fix MemberPointer serialization non-determinism

This fixes a problem originally reported here:
https://github.com/llvm/llvm-project/pull/132401#issuecomment-2795078260

This makes sure we only serialize the class declaration when its strictly
needed, and canonicalizes it, so it doesn't change in ways that don't round
trip.

There are no release notes, since this regression was never released.
---
 clang/include/clang/AST/TypeProperties.td | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/clang/include/clang/AST/TypeProperties.td b/clang/include/clang/AST/TypeProperties.td
index 66d490850678a..2eaad84a3ff70 100644
--- a/clang/include/clang/AST/TypeProperties.td
+++ b/clang/include/clang/AST/TypeProperties.td
@@ -104,7 +104,8 @@ let Class = MemberPointerType in {
     let Read = [{ node->getQualifier() }];
   }
   def : Property<"Cls", DeclRef> {
-    let Read = [{ node->getMostRecentCXXRecordDecl() }];
+    let Read =
+        [{ node->isSugared() ? node->getMostRecentCXXRecordDecl()->getCanonicalDecl() : nullptr }];
   }
 
   def : Creator<[{



More information about the cfe-commits mailing list