diff options
| author | Douglas Gregor <dgregor@apple.com> | 2009-05-19 20:55:31 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2009-05-19 20:55:31 +0000 |
| commit | 4b58ca02c5e57968d8881e671d58de2f26002821 (patch) | |
| tree | 02dbe418c407a90b2db7949451fd40a55b79a798 /clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | |
| parent | 2d228cef505c9f6e39f59d39b951990dc5182bde (diff) | |
| download | bcm5719-llvm-4b58ca02c5e57968d8881e671d58de2f26002821.tar.gz bcm5719-llvm-4b58ca02c5e57968d8881e671d58de2f26002821.zip | |
Template instantiation for __builtin_types_compatible_p.
llvm-svn: 72134
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp index 7cf403c282a..fde31102340 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -56,6 +56,7 @@ namespace { OwningExprResult VisitConditionalOperator(ConditionalOperator *E); // FIXME: AddrLabelExpr OwningExprResult VisitStmtExpr(StmtExpr *E); + OwningExprResult VisitTypesCompatibleExpr(TypesCompatibleExpr *E); OwningExprResult VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E); OwningExprResult VisitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *E); OwningExprResult VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); @@ -466,6 +467,26 @@ Sema::OwningExprResult TemplateExprInstantiator::VisitStmtExpr(StmtExpr *E) { } Sema::OwningExprResult +TemplateExprInstantiator::VisitTypesCompatibleExpr(TypesCompatibleExpr *E) { + QualType Type1 = SemaRef.InstantiateType(E->getArgType1(), TemplateArgs, + /*FIXME:*/ E->getBuiltinLoc(), + DeclarationName()); + if (Type1.isNull()) + return SemaRef.ExprError(); + + QualType Type2 = SemaRef.InstantiateType(E->getArgType2(), TemplateArgs, + /*FIXME:*/ E->getBuiltinLoc(), + DeclarationName()); + if (Type2.isNull()) + return SemaRef.ExprError(); + + return SemaRef.ActOnTypesCompatibleExpr(E->getBuiltinLoc(), + Type1.getAsOpaquePtr(), + Type2.getAsOpaquePtr(), + E->getRParenLoc()); +} + +Sema::OwningExprResult TemplateExprInstantiator::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *E) { bool isSizeOf = E->isSizeOf(); |

