diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-05-19 23:29:16 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-05-19 23:29:16 +0000 |
| commit | 68f10962126890019596842008418ea01347ab49 (patch) | |
| tree | 57accf66ff773155de9090ddb380850eca1e34e8 /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | |
| parent | ad3150cd380bbc69cc15e449052776605e15c9b6 (diff) | |
| download | bcm5719-llvm-68f10962126890019596842008418ea01347ab49.tar.gz bcm5719-llvm-68f10962126890019596842008418ea01347ab49.zip | |
Add FIXMEs for the remaining C and C++ expression types that still
need template instantiation logic. Remove one FIXME by instantiating
the callee in a non-type-dependent CXXOperatorCallExpr.
llvm-svn: 72145
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp index 56126d45046..a0e2941e26d 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -60,6 +60,12 @@ namespace { OwningExprResult VisitShuffleVectorExpr(ShuffleVectorExpr *E); OwningExprResult VisitChooseExpr(ChooseExpr *E); OwningExprResult VisitVAArgExpr(VAArgExpr *E); + // FIXME: InitListExpr + // FIXME: DesignatedInitExpr + // FIXME: ImplicitValueInitExpr + // FIXME: ExtVectorElementExpr + // FIXME: BlockExpr + // FIXME: BlockDeclRefExpr OwningExprResult VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); OwningExprResult VisitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *E); OwningExprResult VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); @@ -67,6 +73,7 @@ namespace { OwningExprResult VisitImplicitCastExpr(ImplicitCastExpr *E); OwningExprResult VisitExplicitCastExpr(ExplicitCastExpr *E); OwningExprResult VisitCStyleCastExpr(CStyleCastExpr *E); + // FIXME: CXXMemberCallExpr OwningExprResult VisitCXXNamedCastExpr(CXXNamedCastExpr *E); OwningExprResult VisitCXXStaticCastExpr(CXXStaticCastExpr *E); OwningExprResult VisitCXXDynamicCastExpr(CXXDynamicCastExpr *E); @@ -75,6 +82,17 @@ namespace { OwningExprResult VisitCXXThisExpr(CXXThisExpr *E); OwningExprResult VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E); OwningExprResult VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E); + // FIXME: CXXTypeIdExpr + // FIXME: CXXThrowExpr + // FIXME: CXXDefaultArgExpr + // FIXME: CXXConstructExpr + // FIXME: CXXFunctionalCastExpr + // FIXME: CXXZeroInitValueExpr + // FIXME: CXXNewExpr + // FIXME: CXXDeleteExpr + // FIXME: UnaryTypeTraitExpr + // FIXME: QualifiedDeclRefExpr + // FIXME: CXXExprWithTemporaries OwningExprResult VisitGNUNullExpr(GNUNullExpr *E); OwningExprResult VisitUnresolvedFunctionNameExpr( UnresolvedFunctionNameExpr *E); @@ -324,13 +342,17 @@ TemplateExprInstantiator::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E) { // perform lookup again at instantiation time (C++ [temp.dep]p1). // Instead, we just build the new overloaded operator call // expression. + OwningExprResult Callee = Visit(E->getCallee()); + if (Callee.isInvalid()) + return SemaRef.ExprError(); + First.release(); Second.release(); - // FIXME: Don't reuse the callee here. We need to instantiate it. + return SemaRef.Owned(new (SemaRef.Context) CXXOperatorCallExpr( SemaRef.Context, E->getOperator(), - E->getCallee(), + Callee.takeAs<Expr>(), Args, E->getNumArgs(), E->getType(), E->getOperatorLoc())); |

