[cfe-commits] r119334 - in /cfe/trunk: include/clang/AST/ExprCXX.h lib/AST/ExprCXX.cpp
Craig Silverstein
csilvers2000 at yahoo.com
Mon Nov 15 23:16:26 PST 2010
Author: csilvers
Date: Tue Nov 16 01:16:25 2010
New Revision: 119334
URL: http://llvm.org/viewvc/llvm-project?rev=119334&view=rev
Log:
Have CXXDeleteExpr::getDestroyedType return the actual destroyed type
in more situations. In particular, for code like
template<class T> void Fn() { T* x; delete x; }
getDestroyedType() will now return T rather than T*, as it would
before this change. On the other hand, for code like this:
template<class T> void Fn() { T x; delete x; }
getDestroyedType() will return an empty QualType(), since it doesn't
know what the actual destroyed type would be. Previously, it would
return T.
OKed by rjmccall
Modified:
cfe/trunk/include/clang/AST/ExprCXX.h
cfe/trunk/lib/AST/ExprCXX.cpp
Modified: cfe/trunk/include/clang/AST/ExprCXX.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprCXX.h?rev=119334&r1=119333&r2=119334&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/ExprCXX.h (original)
+++ cfe/trunk/include/clang/AST/ExprCXX.h Tue Nov 16 01:16:25 2010
@@ -1150,6 +1150,9 @@
Expr *getArgument() { return cast<Expr>(Argument); }
const Expr *getArgument() const { return cast<Expr>(Argument); }
+ /// \brief Retrieve the type being destroyed. If the type being
+ /// destroyed is a dependent type which may or may not be a pointer,
+ /// return an invalid type.
QualType getDestroyedType() const;
virtual SourceRange getSourceRange() const {
Modified: cfe/trunk/lib/AST/ExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprCXX.cpp?rev=119334&r1=119333&r2=119334&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprCXX.cpp (original)
+++ cfe/trunk/lib/AST/ExprCXX.cpp Tue Nov 16 01:16:25 2010
@@ -162,8 +162,9 @@
}
// The type-to-delete may not be a pointer if it's a dependent type.
const QualType ArgType = Arg->getType();
- if (ArgType->isDependentType())
- return ArgType;
+
+ if (ArgType->isDependentType() && !ArgType->isPointerType())
+ return QualType();
return ArgType->getAs<PointerType>()->getPointeeType();
}
More information about the cfe-commits
mailing list