diff options
author | John McCall <rjmccall@apple.com> | 2010-04-07 00:41:46 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-04-07 00:41:46 +0000 |
commit | c91cc66e92b084acd1fdbaa1c3c74242741b3d46 (patch) | |
tree | 0e3dea9ffa41f1bbb1375092d07eff4a358b959b /lib | |
parent | 5dbacb4179c759eef36bcaa6466b91518e3b98a9 (diff) |
Check access for the implicit calls to destructors that occur when we
have a temporary object in C++.
Also fix a tag mismatch that Doug noticed.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100593 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sema/SemaAccess.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 6 |
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/Sema/SemaAccess.cpp b/lib/Sema/SemaAccess.cpp index 99a8f9f5bd..520a9708c6 100644 --- a/lib/Sema/SemaAccess.cpp +++ b/lib/Sema/SemaAccess.cpp @@ -168,7 +168,7 @@ struct AccessTarget : public Sema::AccessedEntity { } private: - friend class AccessTarget; + friend struct AccessTarget; explicit SavedInstanceContext(AccessTarget &Target) : Target(Target), Has(Target.HasInstanceContext) {} AccessTarget &Target; diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 501c877c3d..f6adb1545d 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -2450,8 +2450,12 @@ Sema::OwningExprResult Sema::MaybeBindToTemporary(Expr *E) { RD->getDestructor(Context)); ExprTemporaries.push_back(Temp); if (CXXDestructorDecl *Destructor = - const_cast<CXXDestructorDecl*>(RD->getDestructor(Context))) + const_cast<CXXDestructorDecl*>(RD->getDestructor(Context))) { MarkDeclarationReferenced(E->getExprLoc(), Destructor); + CheckDestructorAccess(E->getExprLoc(), Destructor, + PDiag(diag::err_access_dtor_temp) + << E->getType()); + } // FIXME: Add the temporary to the temporaries vector. return Owned(CXXBindTemporaryExpr::Create(Context, Temp, E)); } |