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(); + } +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits