Sema::AccessResult Sema::CheckAddressOfMemberAccess(Expr *OvlExpr, DeclAccessPair Found) { if (!getLangOptions().AccessControl || Found.getAccess() == AS_none || Found.getAccess() == AS_public) return AR_accessible; OverloadExpr *Ovl = OverloadExpr::find(OvlExpr).getPointer(); NestedNameSpecifier *Qualifier = Ovl->getQualifier(); assert(Qualifier && "address of overloaded member without qualifier"); CXXScopeSpec SS; SS.setScopeRep(Qualifier); SS.setRange(Ovl->getQualifierRange()); DeclContext *DC = computeDeclContext(SS); assert(DC && DC->isRecord() && "scope did not resolve to record"); CXXRecordDecl *NamingClass = cast<CXXRecordDecl>(DC); AccessTarget Entity(Context, AccessTarget::Member, NamingClass, Found, Context.getTypeDeclType(NamingClass)); Entity.setDiag(diag::err_access) << Ovl->getSourceRange(); return CheckAccess(*this, Ovl->getNameLoc(), Entity); }