diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateExpr.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp index 7cf403c282..fde3110234 100644 --- a/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/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(); |