diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-02-25 01:56:36 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-02-25 01:56:36 +0000 |
commit | a2e7dd2f4a50d835351153aee568d35ccc986310 (patch) | |
tree | 9b54d49904946f8b023ba4851bbc68194428f617 /lib/AST/ExprCXX.cpp | |
parent | b1bdc6232d7b4d8574b5436982435ad57f429a91 (diff) |
Use CXXPseudoDestructorExpr as the stored representation for dependent
expressions that look like pseudo-destructors, e.g.,
p->T::~T()
where p has dependent type.
At template instantiate time, we determine whether we actually have a
pseudo-destructor or a member access, and funnel down to the
appropriate routine in Sema.
Fixes PR6380.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97092 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ExprCXX.cpp')
-rw-r--r-- | lib/AST/ExprCXX.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp index 28d07f1df2..b9a4ee6e4d 100644 --- a/lib/AST/ExprCXX.cpp +++ b/lib/AST/ExprCXX.cpp @@ -122,9 +122,24 @@ Stmt::child_iterator CXXPseudoDestructorExpr::child_end() { return &Base + 1; } +PseudoDestructorTypeStorage::PseudoDestructorTypeStorage(TypeSourceInfo *Info) + : Type(Info) +{ + Location = Info->getTypeLoc().getSourceRange().getBegin(); +} + +QualType CXXPseudoDestructorExpr::getDestroyedType() const { + if (TypeSourceInfo *TInfo = DestroyedType.getTypeSourceInfo()) + return TInfo->getType(); + + return QualType(); +} + SourceRange CXXPseudoDestructorExpr::getSourceRange() const { - return SourceRange(Base->getLocStart(), - DestroyedType->getTypeLoc().getSourceRange().getEnd()); + SourceLocation End = DestroyedType.getLocation(); + if (TypeSourceInfo *TInfo = DestroyedType.getTypeSourceInfo()) + End = TInfo->getTypeLoc().getSourceRange().getEnd(); + return SourceRange(Base->getLocStart(), End); } |