aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/SemaExprCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-24 23:40:28 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-24 23:40:28 +0000
commit26d4ac97fb514bb60c2536eae6f203dc569159d9 (patch)
tree7d755fcdcb040ccfc58dad37b399dba8b25437cb /lib/Sema/SemaExprCXX.cpp
parent396a9f235e160093b5f803f7a6a18fad7b68bdbe (diff)
Retain complete source information for the type after the '~' in a
CXXPseudoDestructorExpr. Update template instantiation for pseudo-destructor expressions to use this source information and to make use of Sema::BuildPseudoDestructorExpr when the base expression is dependent or refers to a scalar type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97079 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaExprCXX.cpp')
-rw-r--r--lib/Sema/SemaExprCXX.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp
index ef0ad6f8b1..98e8000b17 100644
--- a/lib/Sema/SemaExprCXX.cpp
+++ b/lib/Sema/SemaExprCXX.cpp
@@ -2431,11 +2431,11 @@ Sema::OwningExprResult Sema::BuildPseudoDestructorExpr(ExprArg Base,
SourceLocation OpLoc,
tok::TokenKind OpKind,
const CXXScopeSpec &SS,
- TypeSourceInfo *ScopeTypeInfo,
+ TypeSourceInfo *ScopeTypeInfo,
SourceLocation CCLoc,
- TypeSourceInfo *DestructedTypeLoc,
+ TypeSourceInfo *DestructedTypeInfo,
bool HasTrailingLParen) {
- assert(DestructedTypeLoc && "No destructed type in pseudo-destructor expr?");
+ assert(DestructedTypeInfo && "No destructed type in pseudo-destructor expr?");
// C++ [expr.pseudo]p2:
// The left-hand side of the dot operator shall be of scalar type. The
@@ -2467,18 +2467,18 @@ Sema::OwningExprResult Sema::BuildPseudoDestructorExpr(ExprArg Base,
// C++ [expr.pseudo]p2:
// [...] The cv-unqualified versions of the object type and of the type
// designated by the pseudo-destructor-name shall be the same type.
- QualType DestructedType = DestructedTypeLoc->getType();
+ QualType DestructedType = DestructedTypeInfo->getType();
SourceLocation DestructedTypeStart
- = DestructedTypeLoc->getTypeLoc().getSourceRange().getBegin();
+ = DestructedTypeInfo->getTypeLoc().getSourceRange().getBegin();
if (!DestructedType->isDependentType() && !ObjectType->isDependentType() &&
!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) {
Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch)
<< ObjectType << DestructedType << BaseE->getSourceRange()
- << DestructedTypeLoc->getTypeLoc().getSourceRange();
+ << DestructedTypeInfo->getTypeLoc().getSourceRange();
// Recover by
DestructedType = ObjectType;
- DestructedTypeLoc = Context.getTrivialTypeSourceInfo(ObjectType,
+ DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType,
DestructedTypeStart);
}
@@ -2513,13 +2513,12 @@ Sema::OwningExprResult Sema::BuildPseudoDestructorExpr(ExprArg Base,
SS.getRange(),
ScopeTypeInfo,
CCLoc,
- DestructedType,
- DestructedTypeStart));
+ DestructedTypeInfo));
if (HasTrailingLParen)
return move(Result);
return DiagnoseDtorReference(
- DestructedTypeLoc->getTypeLoc().getSourceRange().getBegin(),
+ DestructedTypeInfo->getTypeLoc().getSourceRange().getBegin(),
move(Result));
}