diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-05-22 23:25:52 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-05-22 23:25:52 +0000 |
commit | 76658235f9e350eab68bfbb4e88d0be2ad48e102 (patch) | |
tree | 9e064f9be8451e982d8b3159183a06bc9811de03 | |
parent | bec53e7ef3ad39242209a0c7765ca333dd3af8fe (diff) |
Template instantiation for the GNU address-of-label extension.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72301 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateExpr.cpp | 9 | ||||
-rw-r--r-- | test/SemaTemplate/instantiate-function-1.cpp | 8 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp index f20d699815..1e57e1b5a3 100644 --- a/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -55,7 +55,7 @@ namespace { OwningExprResult VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); OwningExprResult VisitCXXConditionDeclExpr(CXXConditionDeclExpr *E); OwningExprResult VisitConditionalOperator(ConditionalOperator *E); - // FIXME: AddrLabelExpr + OwningExprResult VisitAddrLabelExpr(AddrLabelExpr *E); OwningExprResult VisitStmtExpr(StmtExpr *E); OwningExprResult VisitTypesCompatibleExpr(TypesCompatibleExpr *E); OwningExprResult VisitShuffleVectorExpr(ShuffleVectorExpr *E); @@ -526,6 +526,13 @@ TemplateExprInstantiator::VisitConditionalOperator(ConditionalOperator *E) { move(Cond), move(LHS), move(RHS)); } +Sema::OwningExprResult +TemplateExprInstantiator::VisitAddrLabelExpr(AddrLabelExpr *E) { + return SemaRef.ActOnAddrLabel(E->getAmpAmpLoc(), + E->getLabelLoc(), + E->getLabel()->getID()); +} + Sema::OwningExprResult TemplateExprInstantiator::VisitStmtExpr(StmtExpr *E) { Sema::OwningStmtResult SubStmt = SemaRef.InstantiateCompoundStmt(E->getSubStmt(), TemplateArgs, true); diff --git a/test/SemaTemplate/instantiate-function-1.cpp b/test/SemaTemplate/instantiate-function-1.cpp index be8c0e4cbb..5b3a6d9984 100644 --- a/test/SemaTemplate/instantiate-function-1.cpp +++ b/test/SemaTemplate/instantiate-function-1.cpp @@ -178,6 +178,14 @@ template<typename T> struct IndirectGoto0 { void f(T x) { // FIXME: crummy error message below goto *x; // expected-error{{incompatible}} + + prior: + T prior_label = &&prior; + + T later_label = &&later; + + later: + (void)(1+1); } }; |