https://github.com/zyn0217 created https://github.com/llvm/llvm-project/pull/131729
This backports d9110858ee because it fixes a regression introduced in 19 and we don't want it to persist in 20 >From 1cfbb9f334360fc836966a79eba6d00c8d3d22c7 Mon Sep 17 00:00:00 2001 From: Younan Zhang <zyn7...@gmail.com> Date: Mon, 17 Mar 2025 16:53:57 +0800 Subject: [PATCH] Backport/20.x: [Clang] Fix an incorrect assumption on getTemplatedDecl() This backports d9110858ee because it fixes a regression introduced in 19 and we don't want it to persist in 20 --- clang/docs/ReleaseNotes.rst | 1 + clang/lib/Sema/SemaAccess.cpp | 4 ++-- clang/test/SemaCXX/concept-crash-on-diagnostic.cpp | 12 ++++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 02292c10e6964..dc63b5213c546 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -1059,6 +1059,7 @@ Bug Fixes to C++ Support corresponding to a pack parameter (#GH124715) - Clang is now better at keeping track of friend function template instance contexts. (#GH55509) - Fixed an integer overflow bug in computing template parameter depths when synthesizing CTAD guides. (#GH128691) +- Fixed an incorrect pointer access when checking access-control on concepts. (#GH131530) Bug Fixes to AST Handling ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaAccess.cpp b/clang/lib/Sema/SemaAccess.cpp index f79d9a758e7af..6813786df3fc4 100644 --- a/clang/lib/Sema/SemaAccess.cpp +++ b/clang/lib/Sema/SemaAccess.cpp @@ -1518,8 +1518,8 @@ void Sema::HandleDelayedAccessCheck(DelayedDiagnostic &DD, Decl *D) { } else if (FunctionDecl *FN = dyn_cast<FunctionDecl>(D)) { DC = FN; } else if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D)) { - if (isa<DeclContext>(TD->getTemplatedDecl())) - DC = cast<DeclContext>(TD->getTemplatedDecl()); + if (auto *D = dyn_cast_if_present<DeclContext>(TD->getTemplatedDecl())) + DC = D; } else if (auto *RD = dyn_cast<RequiresExprBodyDecl>(D)) { DC = RD; } diff --git a/clang/test/SemaCXX/concept-crash-on-diagnostic.cpp b/clang/test/SemaCXX/concept-crash-on-diagnostic.cpp index 71e55c8290ee4..c38f8888075de 100644 --- a/clang/test/SemaCXX/concept-crash-on-diagnostic.cpp +++ b/clang/test/SemaCXX/concept-crash-on-diagnostic.cpp @@ -36,3 +36,15 @@ void function() { // expected-note@#4 {{candidate template ignored: constraints not satisfied [with IteratorL = Object *, IteratorR = Object *]}} // We don't know exactly the substituted type for `lhs == rhs`, thus a placeholder 'expr-type' is emitted. // expected-note@#3 {{because 'convertible_to<expr-type, bool>' would be invalid}} + +namespace GH131530 { + +class foo { + struct bar {}; // expected-note {{implicitly declared private}} +}; + +template <typename T> +concept is_foo_concept = __is_same(foo::bar, T); +// expected-error@-1 {{'bar' is a private member of 'GH131530::foo'}} + +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits