https://github.com/jcsxky updated https://github.com/llvm/llvm-project/pull/83847
>From d60f27e47318b12aac3b462bc074af53ae1296bd Mon Sep 17 00:00:00 2001 From: huqizhi <huqi...@feysh.com> Date: Mon, 4 Mar 2024 21:51:07 +0800 Subject: [PATCH] [Clang][Sema] Allow access to a public template alias declaration that refers to friend's private nested type --- clang/docs/ReleaseNotes.rst | 3 +++ clang/lib/Sema/SemaAccess.cpp | 7 +++++++ clang/test/SemaTemplate/PR25708.cpp | 23 +++++++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 clang/test/SemaTemplate/PR25708.cpp diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 8300a8484585ae..945a21f61abc61 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -239,6 +239,9 @@ Bug Fixes in This Version for variables created through copy initialization having side-effects in C++17 and later. Fixes (#GH64356) (#GH79518). +- Allow access to a public template alias declaration that refers to friend's + private nested type (`#25708 <https://github.com/llvm/llvm-project/issues/25708>`). + Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/SemaAccess.cpp b/clang/lib/Sema/SemaAccess.cpp index 4af3c0f30a8e8a..1bbe0f5b5298d7 100644 --- a/clang/lib/Sema/SemaAccess.cpp +++ b/clang/lib/Sema/SemaAccess.cpp @@ -1481,6 +1481,13 @@ static Sema::AccessResult CheckAccess(Sema &S, SourceLocation Loc, } EffectiveContext EC(S.CurContext); + auto &Active = S.CodeSynthesisContexts.back(); + if (Active.Kind == Sema::CodeSynthesisContext::TemplateInstantiation && + Active.Entity) + if (auto *RD = + dyn_cast_or_null<CXXRecordDecl>(Active.Entity->getDeclContext())) + EC.Records.push_back(RD); + switch (CheckEffectiveAccess(S, EC, Loc, Entity)) { case AR_accessible: return Sema::AR_accessible; case AR_inaccessible: return Sema::AR_inaccessible; diff --git a/clang/test/SemaTemplate/PR25708.cpp b/clang/test/SemaTemplate/PR25708.cpp new file mode 100644 index 00000000000000..cc2e7551a6abaa --- /dev/null +++ b/clang/test/SemaTemplate/PR25708.cpp @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -std=c++11 -verify %s +// RUN: %clang_cc1 -std=c++14 -verify %s +// RUN: %clang_cc1 -std=c++17 -verify %s +// RUN: %clang_cc1 -std=c++20 -verify %s +// expected-no-diagnostics + +struct FooAccessor +{ + template <typename T> + using Foo = typename T::Foo; +}; + +class Type +{ + friend struct FooAccessor; + + using Foo = int; +}; + +int main() +{ + FooAccessor::Foo<Type> t; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits