diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-11-09 17:16:50 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-11-09 17:16:50 +0000 |
commit | d3d9306275962ebf8e471f0525bebc4530f8513d (patch) | |
tree | 168906b487abf9c67d062b20218017b383654ff8 /clang/lib/Sema/TreeTransform.h | |
parent | 968ecd9888c15e00348701bcca5f8f6431ebccee (diff) | |
download | bcm5719-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.h | 16 |
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> |