[llvm-branch-commits] [clang] 16bfe1e - Fix comparison of Structural Values
Tom Stellard via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Jan 27 10:32:37 PST 2024
Author: erichkeane
Date: 2024-01-27T10:31:53-08:00
New Revision: 16bfe1e89f6bc6c9cf5c584247856840f83fad62
URL: https://github.com/llvm/llvm-project/commit/16bfe1e89f6bc6c9cf5c584247856840f83fad62
DIFF: https://github.com/llvm/llvm-project/commit/16bfe1e89f6bc6c9cf5c584247856840f83fad62.diff
LOG: Fix comparison of Structural Values
Fixes a regression from #78041 as reported in the review. The original
patch failed to compare the canonical type, which this adds. A slightly
modified test of the original report is added.
(cherry picked from commit e3ee3762304aa81e4a240500844bfdd003401b36)
Added:
Modified:
clang/lib/AST/TemplateBase.cpp
clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/TemplateBase.cpp b/clang/lib/AST/TemplateBase.cpp
index 2bdbeb08ef20465..3310d7dc24c59d2 100644
--- a/clang/lib/AST/TemplateBase.cpp
+++ b/clang/lib/AST/TemplateBase.cpp
@@ -450,7 +450,8 @@ bool TemplateArgument::structurallyEquals(const TemplateArgument &Other) const {
getAsIntegral() == Other.getAsIntegral();
case StructuralValue: {
- if (getStructuralValueType() != Other.getStructuralValueType())
+ if (getStructuralValueType().getCanonicalType() !=
+ Other.getStructuralValueType().getCanonicalType())
return false;
llvm::FoldingSetNodeID A, B;
diff --git a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
index b5b8cadc909ce00..834174cdf6a32dc 100644
--- a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
+++ b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp
@@ -336,3 +336,21 @@ template<int ...Ns> void bar(B b) {
(b.operator Tbar<Ns>(), ...);
}
}
+
+namespace ReportedRegression1 {
+ const char kt[] = "dummy";
+
+ template <class T, const char id[]>
+ class SomeTempl { };
+
+ template <const char id[]>
+ class SomeTempl<int, id> {
+ public:
+ int exit_code() const { return 0; }
+ };
+
+ int use() {
+ SomeTempl<int, kt> dummy;
+ return dummy.exit_code();
+ }
+}
More information about the llvm-branch-commits
mailing list