diff options
Diffstat (limited to 'lib/AST')
-rw-r--r-- | lib/AST/ExprCXX.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp index a6aeef1ba8..6e73b9cbc2 100644 --- a/lib/AST/ExprCXX.cpp +++ b/lib/AST/ExprCXX.cpp @@ -149,6 +149,19 @@ Stmt::child_iterator CXXNewExpr::child_end() { } // CXXDeleteExpr +QualType CXXDeleteExpr::getDestroyedType() const { + const Expr *Arg = getArgument(); + while (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Arg)) { + if (ICE->getCastKind() != CK_UserDefinedConversion && + ICE->getType()->isVoidPointerType()) + Arg = ICE->getSubExpr(); + else + break; + } + + return Arg->getType()->getAs<PointerType>()->getPointeeType(); +} + Stmt::child_iterator CXXDeleteExpr::child_begin() { return &Argument; } Stmt::child_iterator CXXDeleteExpr::child_end() { return &Argument+1; } |