Index: SemaAccess.cpp =================================================================== --- SemaAccess.cpp +++ SemaAccess.cpp @@ -1165,6 +1165,9 @@ accessSoFar = D->getAccess(); const CXXRecordDecl *declaringClass = entity.getDeclaringClass(); + if (accessSoFar == AS_none) + return diagnoseBadDirectAccess(S, EC, entity); + switch (HasAccess(S, EC, declaringClass, accessSoFar, entity)) { // If the declaration is accessible when named in its declaring // class, then we must be constrained by the path. @@ -1354,6 +1357,10 @@ const CXXRecordDecl *DeclaringClass = Entity.getDeclaringClass(); FinalAccess = Target->getAccess(); + + if (FinalAccess == AS_none) + return AR_inaccessible; + switch (HasAccess(S, EC, DeclaringClass, FinalAccess, Entity)) { case AR_accessible: // Target is accessible at EC when named in its declaring class.