[clang] 41a35a7 - [clang][bytecode] Fix comparing member pointers for redeclared `FieldDecl`s (#208660)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 10 04:08:29 PDT 2026
Author: Timm Baeder
Date: 2026-07-10T13:08:24+02:00
New Revision: 41a35a7d99604174c442c975ef1472498a47e643
URL: https://github.com/llvm/llvm-project/commit/41a35a7d99604174c442c975ef1472498a47e643
DIFF: https://github.com/llvm/llvm-project/commit/41a35a7d99604174c442c975ef1472498a47e643.diff
LOG: [clang][bytecode] Fix comparing member pointers for redeclared `FieldDecl`s (#208660)
Use the first decl to compare.
Added:
Modified:
clang/lib/AST/ByteCode/MemberPointer.cpp
clang/test/Modules/templates.mm
Removed:
################################################################################
diff --git a/clang/lib/AST/ByteCode/MemberPointer.cpp b/clang/lib/AST/ByteCode/MemberPointer.cpp
index f0c1fe5930261..bccadc4d4fc8f 100644
--- a/clang/lib/AST/ByteCode/MemberPointer.cpp
+++ b/clang/lib/AST/ByteCode/MemberPointer.cpp
@@ -89,8 +89,20 @@ APValue MemberPointer::toAPValue(const ASTContext &ASTCtx) const {
ComparisonCategoryResult
MemberPointer::compare(const MemberPointer &RHS) const {
- if (this->getDecl() == RHS.getDecl()) {
+ assert(!isZero());
+ assert(!RHS.isZero());
+ const auto getCmpDecl = [](const MemberPointer &P) -> const Decl * {
+ const Decl *D = P.getDecl()->getMostRecentDecl();
+ if (const auto *FD = dyn_cast<FieldDecl>(D))
+ D = FD->getFirstDecl();
+ return D;
+ };
+
+ const Decl *LHSCmpDecl = getCmpDecl(*this);
+ const Decl *RHSCmpDecl = getCmpDecl(RHS);
+
+ if (LHSCmpDecl == RHSCmpDecl) {
if (this->PathLength != RHS.PathLength)
return ComparisonCategoryResult::Unordered;
diff --git a/clang/test/Modules/templates.mm b/clang/test/Modules/templates.mm
index 610de099d398d..567717491eb87 100644
--- a/clang/test/Modules/templates.mm
+++ b/clang/test/Modules/templates.mm
@@ -1,6 +1,9 @@
// RUN: rm -rf %t
// RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -verify %s -Wno-objc-root-class
// RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -emit-llvm %s -o - -Wno-objc-root-class | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -verify %s -Wno-objc-root-class -fexperimental-new-constant-interpreter
+// RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++11 -x objective-c++ -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs -emit-llvm %s -o - -Wno-objc-root-class -fexperimental-new-constant-interpreter | FileCheck %s
+
// expected-no-diagnostics
// REQUIRES: x86-registered-target
@import templates_left;
More information about the cfe-commits
mailing list