Template instantiation for ExtVectorElementExpr.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72299 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp
index da4fb75..f20d699 100644
--- a/lib/Sema/SemaTemplateInstantiateExpr.cpp
+++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp
@@ -64,7 +64,7 @@
     OwningExprResult VisitInitListExpr(InitListExpr *E);
     OwningExprResult VisitDesignatedInitExpr(DesignatedInitExpr *E);
     OwningExprResult VisitImplicitValueInitExpr(ImplicitValueInitExpr *E);
-    // FIXME: ExtVectorElementExpr
+    OwningExprResult VisitExtVectorElementExpr(ExtVectorElementExpr *E);
     // FIXME: BlockExpr
     // FIXME: BlockDeclRefExpr
     OwningExprResult VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E);
@@ -708,6 +708,23 @@
 }
 
 Sema::OwningExprResult 
+TemplateExprInstantiator::VisitExtVectorElementExpr(ExtVectorElementExpr *E) {
+  OwningExprResult Base = Visit(E->getBase());
+  if (Base.isInvalid())
+    return SemaRef.ExprError();
+
+  SourceLocation FakeOperatorLoc = 
+    SemaRef.PP.getLocForEndOfToken(E->getBase()->getSourceRange().getEnd());
+  return SemaRef.ActOnMemberReferenceExpr(/*Scope=*/0,
+                                          move(Base), 
+                                          /*FIXME*/FakeOperatorLoc,
+                                          tok::period,
+                                          E->getAccessorLoc(),
+                                          E->getAccessor(),
+                                   /*FIXME?*/Sema::DeclPtrTy::make((Decl*)0));
+}
+
+Sema::OwningExprResult 
 TemplateExprInstantiator::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) {
   bool isSizeOf = E->isSizeOf();