diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-02-01 15:50:11 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-02-01 15:50:11 +0000 |
| commit | fa7781384ebb16dabc6d60a5ea9a1a8dcfc850a2 (patch) | |
| tree | c2c7f10c85ad801694969410d1343c2b380d3a88 /clang/lib/Sema | |
| parent | 1732850158f30aa929f90dc88d49c98042b273b3 (diff) | |
| download | bcm5719-llvm-fa7781384ebb16dabc6d60a5ea9a1a8dcfc850a2.tar.gz bcm5719-llvm-fa7781384ebb16dabc6d60a5ea9a1a8dcfc850a2.zip | |
Implement access checking for the "delete" operator. Fixes PR9050,
from Alex Miller!
llvm-svn: 124663
Diffstat (limited to 'clang/lib/Sema')
| -rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 82e818fba05..7bc9af1191e 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -1687,7 +1687,15 @@ Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, MarkDeclarationReferenced(StartLoc, OperatorDelete); - // FIXME: Check access and ambiguity of operator delete and destructor. + // Check access and ambiguity of operator delete and destructor. + if (const RecordType *RT = PointeeElem->getAs<RecordType>()) { + CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); + if (CXXDestructorDecl *Dtor = LookupDestructor(RD)) { + CheckDestructorAccess(Ex->getExprLoc(), Dtor, + PDiag(diag::err_access_dtor) << PointeeElem); + } + } + } return Owned(new (Context) CXXDeleteExpr(Context.VoidTy, UseGlobal, ArrayForm, |

