diff options
author | Anders Carlsson <andersca@mac.com> | 2009-05-15 00:15:26 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-05-15 00:15:26 +0000 |
commit | f42de874b3c7768aca07c80da9fb1e1e68bf31dd (patch) | |
tree | 8310451cb986a8cfdb71a381ce9a02628672f966 /clang/lib | |
parent | 47054f3d571ca753c8f1c038a705f1f79897c910 (diff) | |
download | bcm5719-llvm-f42de874b3c7768aca07c80da9fb1e1e68bf31dd.tar.gz bcm5719-llvm-f42de874b3c7768aca07c80da9fb1e1e68bf31dd.zip |
Instantiate goto and label statements. (Very useful, I know)
llvm-svn: 71822
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp index 2dca993f741..e747236204b 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -445,6 +445,8 @@ namespace { OwningStmtResult VisitNullStmt(NullStmt *S); OwningStmtResult VisitCompoundStmt(CompoundStmt *S); OwningStmtResult VisitExpr(Expr *E); + OwningStmtResult VisitLabelStmt(LabelStmt *S); + OwningStmtResult VisitGotoStmt(GotoStmt *S); // Base case. I'm supposed to ignore this. OwningStmtResult VisitStmt(Stmt *S) { @@ -481,6 +483,22 @@ Sema::OwningStmtResult TemplateStmtInstantiator::VisitNullStmt(NullStmt *S) { return SemaRef.Owned(new (SemaRef.Context) NullStmt(S->getSemiLoc())); } +Sema::OwningStmtResult TemplateStmtInstantiator::VisitLabelStmt(LabelStmt *S) { + OwningStmtResult SubStmt = Visit(S->getSubStmt()); + + if (SubStmt.isInvalid()) + return SemaRef.StmtError(); + + // FIXME: Pass the real colon loc in. + return SemaRef.ActOnLabelStmt(S->getIdentLoc(), S->getID(), SourceLocation(), + move(SubStmt)); +} + +Sema::OwningStmtResult TemplateStmtInstantiator::VisitGotoStmt(GotoStmt *S) { + return SemaRef.ActOnGotoStmt(S->getGotoLoc(), S->getLabelLoc(), + S->getLabel()->getID()); +} + Sema::OwningStmtResult TemplateStmtInstantiator::VisitCompoundStmt(CompoundStmt *S) { // FIXME: We need an *easy* RAII way to delete these statements if |