https://github.com/jcsxky created https://github.com/llvm/llvm-project/pull/102554
Skip adding template instantiation arguments when the declaration is a nested class template when instantiating constraint expression. attempt to fix https://github.com/llvm/llvm-project/issues/102320 >From 0080b8743a1186d0463e1ff7af73a2a8776b66f1 Mon Sep 17 00:00:00 2001 From: Qizhi Hu <836744...@qq.com> Date: Fri, 9 Aug 2024 08:19:09 +0800 Subject: [PATCH] [Clang][Sema] Fix mismatch of out-of-line definition of template class --- clang/docs/ReleaseNotes.rst | 1 + clang/lib/Sema/SemaConcept.cpp | 3 ++- clang/test/SemaCXX/PR102320.cpp | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 clang/test/SemaCXX/PR102320.cpp diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index cb0a1b25e51c2..ffc7e34f1166f 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -212,6 +212,7 @@ Bug Fixes to C++ Support - Clang now preserves the unexpanded flag in a lambda transform used for pack expansion. (#GH56852), (#GH85667), (#GH99877). - Fixed a bug when diagnosing ambiguous explicit specializations of constrained member functions. +- Fix a bug in out-of-line definition of constrained class template nested in a class template. (GH102320). Bug Fixes to AST Handling ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaConcept.cpp b/clang/lib/Sema/SemaConcept.cpp index d4c9d044985e3..016dd90b9e95e 100644 --- a/clang/lib/Sema/SemaConcept.cpp +++ b/clang/lib/Sema/SemaConcept.cpp @@ -951,7 +951,8 @@ static const Expr *SubstituteConstraintExpressionWithoutSatisfaction( DeclInfo.getDecl(), DeclInfo.getLexicalDeclContext(), /*Final=*/false, /*Innermost=*/std::nullopt, /*RelativeToPrimary=*/true, - /*Pattern=*/nullptr, /*ForConstraintInstantiation=*/true, + /*Pattern=*/nullptr, + !isa_and_present<ClassTemplateDecl>(DeclInfo.getDecl()), /*SkipForSpecialization*/ false); if (MLTAL.getNumSubstitutedLevels() == 0) diff --git a/clang/test/SemaCXX/PR102320.cpp b/clang/test/SemaCXX/PR102320.cpp new file mode 100644 index 0000000000000..56973875c7b95 --- /dev/null +++ b/clang/test/SemaCXX/PR102320.cpp @@ -0,0 +1,18 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s +// expected-no-diagnostics + +template<typename> +concept Constrained = true; + +template <typename T> +class C +{ + template<Constrained> + class D; +}; + +template <typename T> +template <Constrained> +class C<T>::D +{ +}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits