aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2009-11-04 07:28:41 +0000
committerJohn McCall <rjmccall@apple.com>2009-11-04 07:28:41 +0000
commit5ab75172051a6d2ea71a80a79e81c65519fd3462 (patch)
treee03271bc6d106935276fbc951192f7e85b3f1a5b /lib/Sema/TreeTransform.h
parentc86a6e988184867b09aa17a619402d0e81d0fda0 (diff)
Preserve type source information in sizeof/alignof expressions, and pass it
through to indexing. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@86018 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/TreeTransform.h')
-rw-r--r--lib/Sema/TreeTransform.h15
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index 9a6b851d63..5713da9fa5 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -884,9 +884,10 @@ public:
///
/// By default, performs semantic analysis to build the new expression.
/// Subclasses may override this routine to provide different behavior.
- OwningExprResult RebuildSizeOfAlignOf(QualType T, SourceLocation OpLoc,
+ OwningExprResult RebuildSizeOfAlignOf(DeclaratorInfo *DInfo,
+ SourceLocation OpLoc,
bool isSizeOf, SourceRange R) {
- return getSema().CreateSizeOfAlignOfExpr(T, OpLoc, isSizeOf, R);
+ return getSema().CreateSizeOfAlignOfExpr(DInfo, OpLoc, isSizeOf, R);
}
/// \brief Build a new sizeof or alignof expression with an expression
@@ -3532,16 +3533,16 @@ Sema::OwningExprResult
TreeTransform<Derived>::TransformSizeOfAlignOfExpr(SizeOfAlignOfExpr *E,
bool isAddressOfOperand) {
if (E->isArgumentType()) {
- TemporaryBase Rebase(*this, E->getOperatorLoc(), DeclarationName());
+ DeclaratorInfo *OldT = E->getArgumentTypeInfo();
- QualType T = getDerived().TransformType(E->getArgumentType());
- if (T.isNull())
+ DeclaratorInfo *NewT = getDerived().TransformType(OldT);
+ if (!NewT)
return SemaRef.ExprError();
- if (!getDerived().AlwaysRebuild() && T == E->getArgumentType())
+ if (!getDerived().AlwaysRebuild() && OldT == NewT)
return SemaRef.Owned(E->Retain());
- return getDerived().RebuildSizeOfAlignOf(T, E->getOperatorLoc(),
+ return getDerived().RebuildSizeOfAlignOf(NewT, E->getOperatorLoc(),
E->isSizeOf(),
E->getSourceRange());
}