summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-11-09 17:16:50 +0000
committerDouglas Gregor <dgregor@apple.com>2009-11-09 17:16:50 +0000
commitd3d9306275962ebf8e471f0525bebc4530f8513d (patch)
tree168906b487abf9c67d062b20218017b383654ff8 /clang/lib/Sema/TreeTransform.h
parent968ecd9888c15e00348701bcca5f8f6431ebccee (diff)
downloadbcm5719-llvm-d3d9306275962ebf8e471f0525bebc4530f8513d.tar.gz
bcm5719-llvm-d3d9306275962ebf8e471f0525bebc4530f8513d.zip
When transforming an InitListExpr, if we already computed a non-dependent type for the InitListExpr, keep it
llvm-svn: 86559
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r--clang/lib/Sema/TreeTransform.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 767725a1f31..799d01b0ed9 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -1063,8 +1063,18 @@ public:
/// Subclasses may override this routine to provide different behavior.
OwningExprResult RebuildInitList(SourceLocation LBraceLoc,
MultiExprArg Inits,
- SourceLocation RBraceLoc) {
- return SemaRef.ActOnInitList(LBraceLoc, move(Inits), RBraceLoc);
+ SourceLocation RBraceLoc,
+ QualType ResultTy) {
+ OwningExprResult Result
+ = SemaRef.ActOnInitList(LBraceLoc, move(Inits), RBraceLoc);
+ if (Result.isInvalid() || ResultTy->isDependentType())
+ return move(Result);
+
+ // Patch in the result type we were given, which may have been computed
+ // when the initial InitListExpr was built.
+ InitListExpr *ILE = cast<InitListExpr>((Expr *)Result.get());
+ ILE->setType(ResultTy);
+ return move(Result);
}
/// \brief Build a new designated initializer expression.
@@ -3893,7 +3903,7 @@ TreeTransform<Derived>::TransformInitListExpr(InitListExpr *E,
return SemaRef.Owned(E->Retain());
return getDerived().RebuildInitList(E->getLBraceLoc(), move_arg(Inits),
- E->getRBraceLoc());
+ E->getRBraceLoc(), E->getType());
}
template<typename Derived>
OpenPOWER on IntegriCloud