diff options
Diffstat (limited to 'clang/lib/Sema/SemaAccess.cpp')
-rw-r--r-- | clang/lib/Sema/SemaAccess.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/clang/lib/Sema/SemaAccess.cpp b/clang/lib/Sema/SemaAccess.cpp index 4ba46a9..b77cbdb 100644 --- a/clang/lib/Sema/SemaAccess.cpp +++ b/clang/lib/Sema/SemaAccess.cpp @@ -1873,21 +1873,20 @@ Sema::AccessResult Sema::CheckAddressOfMemberAccess(Expr *OvlExpr, return CheckAccess(*this, Ovl->getNameLoc(), Entity); } -Sema::AccessResult Sema::CheckBaseClassAccess(SourceLocation AccessLoc, - QualType Base, QualType Derived, - const CXXBasePath &Path, - unsigned DiagID, bool ForceCheck, - bool ForceUnprivileged) { +Sema::AccessResult Sema::CheckBaseClassAccess( + SourceLocation AccessLoc, CXXRecordDecl *Base, CXXRecordDecl *Derived, + const CXXBasePath &Path, unsigned DiagID, + llvm::function_ref<void(PartialDiagnostic &)> SetupPDiag, bool ForceCheck, + bool ForceUnprivileged) { if (!ForceCheck && !getLangOpts().AccessControl) return AR_accessible; if (Path.Access == AS_public) return AR_accessible; - AccessTarget Entity(Context, AccessTarget::Base, Base->getAsCXXRecordDecl(), - Derived->getAsCXXRecordDecl(), Path.Access); + AccessTarget Entity(Context, AccessTarget::Base, Base, Derived, Path.Access); if (DiagID) - Entity.setDiag(DiagID) << Derived << Base; + SetupPDiag(Entity.setDiag(DiagID)); if (ForceUnprivileged) { switch ( @@ -1904,6 +1903,17 @@ Sema::AccessResult Sema::CheckBaseClassAccess(SourceLocation AccessLoc, return CheckAccess(*this, AccessLoc, Entity); } +Sema::AccessResult Sema::CheckBaseClassAccess(SourceLocation AccessLoc, + QualType Base, QualType Derived, + const CXXBasePath &Path, + unsigned DiagID, bool ForceCheck, + bool ForceUnprivileged) { + return CheckBaseClassAccess( + AccessLoc, Base->getAsCXXRecordDecl(), Derived->getAsCXXRecordDecl(), + Path, DiagID, [&](PartialDiagnostic &PD) { PD << Derived << Base; }, + ForceCheck, ForceUnprivileged); +} + void Sema::CheckLookupAccess(const LookupResult &R) { assert(getLangOpts().AccessControl && "performing access check without access control"); |