diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-05-21 23:48:18 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-05-21 23:48:18 +0000 |
| commit | 1c37d9eed5db48e5190d48698c485f2f4be07fe6 (patch) | |
| tree | e9ac6e849ae736a1bdfaa8d62de42492c9ef3926 /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | |
| parent | db338f3f41161611d6cebc523ae4c9f3cd33c620 (diff) | |
| download | bcm5719-llvm-1c37d9eed5db48e5190d48698c485f2f4be07fe6.tar.gz bcm5719-llvm-1c37d9eed5db48e5190d48698c485f2f4be07fe6.zip | |
Template instantiation for C99 compound literals
llvm-svn: 72236
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp index 14eef13f8d0..fd88b934fbf 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -49,7 +49,7 @@ namespace { OwningExprResult VisitArraySubscriptExpr(ArraySubscriptExpr *E); OwningExprResult VisitCallExpr(CallExpr *E); // FIXME: VisitMemberExpr - // FIXME: CompoundLiteralExpr + OwningExprResult VisitCompoundLiteralExpr(CompoundLiteralExpr *E); OwningExprResult VisitBinaryOperator(BinaryOperator *E); OwningExprResult VisitCompoundAssignOperator(CompoundAssignOperator *E); OwningExprResult VisitCXXOperatorCallExpr(CXXOperatorCallExpr *E); @@ -289,6 +289,26 @@ Sema::OwningExprResult TemplateExprInstantiator::VisitCallExpr(CallExpr *E) { } Sema::OwningExprResult +TemplateExprInstantiator::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) { + SourceLocation FakeTypeLoc + = SemaRef.PP.getLocForEndOfToken(E->getLParenLoc()); + QualType T = SemaRef.InstantiateType(E->getType(), TemplateArgs, + FakeTypeLoc, + DeclarationName()); + if (T.isNull()) + return SemaRef.ExprError(); + + OwningExprResult Init = Visit(E->getInitializer()); + if (Init.isInvalid()) + return SemaRef.ExprError(); + + return SemaRef.ActOnCompoundLiteral(E->getLParenLoc(), + T.getAsOpaquePtr(), + /*FIXME*/E->getLParenLoc(), + move(Init)); +} + +Sema::OwningExprResult TemplateExprInstantiator::VisitBinaryOperator(BinaryOperator *E) { Sema::OwningExprResult LHS = Visit(E->getLHS()); if (LHS.isInvalid()) |

