diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-12-17 23:40:46 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-12-17 23:40:46 +0000 |
commit | af9bf59ba901e4a6367fb262454557d1edc27e93 (patch) | |
tree | 16e0ac6fd2c5174c01ba94a891b8fc4c5a70983a /clang/lib/Sema/SemaAccess.cpp | |
parent | 969902b43b0c028d49dba8ee0b443351fa0453cb (diff) | |
download | llvm-af9bf59ba901e4a6367fb262454557d1edc27e93.zip llvm-af9bf59ba901e4a6367fb262454557d1edc27e93.tar.gz llvm-af9bf59ba901e4a6367fb262454557d1edc27e93.tar.bz2 |
Don't assume friended C++ method decls have qualifiers
There are a few cases where unqualified lookup can find C++ methods.
Unfortunately, none of them seem to have illegal access paths, so I
can't excercise the diagnostic source range code that I am changing
here.
Fixes PR21851, which was a crash on valid.
llvm-svn: 224471
Diffstat (limited to 'clang/lib/Sema/SemaAccess.cpp')
-rw-r--r-- | clang/lib/Sema/SemaAccess.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaAccess.cpp b/clang/lib/Sema/SemaAccess.cpp index ffdb0aa..37240c2 100644 --- a/clang/lib/Sema/SemaAccess.cpp +++ b/clang/lib/Sema/SemaAccess.cpp @@ -1749,14 +1749,14 @@ Sema::AccessResult Sema::CheckFriendAccess(NamedDecl *target) { return AR_accessible; CXXMethodDecl *method = cast<CXXMethodDecl>(target->getAsFunction()); - assert(method->getQualifier()); AccessTarget entity(Context, AccessTarget::Member, cast<CXXRecordDecl>(target->getDeclContext()), DeclAccessPair::make(target, access), /*no instance context*/ QualType()); entity.setDiag(diag::err_access_friend_function) - << method->getQualifierLoc().getSourceRange(); + << (method->getQualifier() ? method->getQualifierLoc().getSourceRange() + : method->getNameInfo().getSourceRange()); // We need to bypass delayed-diagnostics because we might be called // while the ParsingDeclarator is active. |