Template instantiation for IndirectGotoStmt. Now my life is complete.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71917 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaTemplateInstantiateStmt.cpp b/lib/Sema/SemaTemplateInstantiateStmt.cpp
index 9252677..527b33d 100644
--- a/lib/Sema/SemaTemplateInstantiateStmt.cpp
+++ b/lib/Sema/SemaTemplateInstantiateStmt.cpp
@@ -49,6 +49,7 @@
     OwningStmtResult VisitExpr(Expr *E);
     OwningStmtResult VisitLabelStmt(LabelStmt *S);
     OwningStmtResult VisitGotoStmt(GotoStmt *S);
+    OwningStmtResult VisitIndirectGotoStmt(IndirectGotoStmt *S);
     OwningStmtResult VisitBreakStmt(BreakStmt *S);
     OwningStmtResult VisitContinueStmt(ContinueStmt *S);
     OwningStmtResult VisitReturnStmt(ReturnStmt *S);
@@ -104,6 +105,17 @@
                                S->getLabel()->getID());
 }
 
+Sema::OwningStmtResult 
+TemplateStmtInstantiator::VisitIndirectGotoStmt(IndirectGotoStmt *S) {
+  OwningExprResult Target = SemaRef.InstantiateExpr(S->getTarget(),
+                                                    TemplateArgs);
+  if (Target.isInvalid())
+    return SemaRef.StmtError();
+
+  return SemaRef.ActOnIndirectGotoStmt(S->getGotoLoc(), S->getStarLoc(),
+                                       move(Target));
+}
+
 Sema::OwningStmtResult TemplateStmtInstantiator::VisitBreakStmt(BreakStmt *S) {
   return SemaRef.Owned(S->Clone(SemaRef.Context));
 }