summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-05-19 23:29:16 +0000
committerDouglas Gregor <dgregor@apple.com>2009-05-19 23:29:16 +0000
commit68f10962126890019596842008418ea01347ab49 (patch)
tree57accf66ff773155de9090ddb380850eca1e34e8 /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp
parentad3150cd380bbc69cc15e449052776605e15c9b6 (diff)
downloadbcm5719-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.cpp26
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()));
OpenPOWER on IntegriCloud