https://github.com/github-actions[bot] created https://github.com/llvm/llvm-project/pull/79361
resolves llvm/llvm-project#79355 >From f99049f248ad367455b07c9db31f1728927b3df1 Mon Sep 17 00:00:00 2001 From: erichkeane <eke...@nvidia.com> Date: Wed, 24 Jan 2024 12:07:22 -0800 Subject: [PATCH] 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) --- clang/lib/AST/TemplateBase.cpp | 3 ++- .../SemaTemplate/temp_arg_nontype_cxx20.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/TemplateBase.cpp b/clang/lib/AST/TemplateBase.cpp index 2bdbeb08ef2046..3310d7dc24c59d 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 b5b8cadc909ce0..834174cdf6a32d 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(); + } +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits