diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-08-08 01:41:12 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-08-08 01:41:12 +0000 |
commit | 43d9d9243329b1b75d1a6efdad9f16d6fb386b8e (patch) | |
tree | d788e8c42f7e7838e8a707e93e0bbb307197f9a7 /lib/Sema/SemaTemplateInstantiateExpr.cpp | |
parent | 80e4b9e0e87064a824d72b6ff89074206ecced58 (diff) |
Introduce reference counting for statements and expressions, using it
to allow sharing of nodes. Simplifies some aspects of template
instantiation, and fixes both PR3444 and <rdar://problem/6757457>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78450 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiateExpr.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateExpr.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateExpr.cpp b/lib/Sema/SemaTemplateInstantiateExpr.cpp index 2e7ed1a632..1e97f5fcc4 100644 --- a/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -57,53 +57,53 @@ Sema::OwningExprResult TemplateExprInstantiator::VisitExpr(Expr *E) { Sema::OwningExprResult TemplateExprInstantiator::VisitPredefinedExpr(PredefinedExpr *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitIntegerLiteral(IntegerLiteral *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitFloatingLiteral(FloatingLiteral *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitStringLiteral(StringLiteral *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitCharacterLiteral(CharacterLiteral *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitImaginaryLiteral(ImaginaryLiteral *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitCXXNullPtrLiteralExpr(CXXNullPtrLiteralExpr *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitGNUNullExpr(GNUNullExpr *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitUnresolvedFunctionNameExpr( UnresolvedFunctionNameExpr *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult @@ -706,7 +706,8 @@ TemplateExprInstantiator::VisitImplicitValueInitExpr( ImplicitValueInitExpr *E) { assert(!E->isTypeDependent() && !E->isValueDependent() && "ImplicitValueInitExprs are never dependent"); - return SemaRef.Clone(E); + E->Retain(); + return SemaRef.Owned(E); } Sema::OwningExprResult @@ -1110,7 +1111,7 @@ TemplateExprInstantiator::VisitCXXFunctionalCastExpr( Sema::OwningExprResult TemplateExprInstantiator::VisitCXXZeroInitValueExpr(CXXZeroInitValueExpr *E) { - return SemaRef.Clone(E); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult @@ -1289,7 +1290,7 @@ TemplateExprInstantiator::VisitCXXUnresolvedMemberExpr( //---------------------------------------------------------------------------- Sema::OwningExprResult TemplateExprInstantiator::VisitObjCStringLiteral(ObjCStringLiteral *E) { - return SemaRef.Owned(E->Clone(SemaRef.Context)); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult @@ -1314,12 +1315,12 @@ TemplateExprInstantiator::VisitObjCMessageExpr(ObjCMessageExpr *E) { Sema::OwningExprResult TemplateExprInstantiator::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { - return SemaRef.Owned(E->Clone(SemaRef.Context)); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult TemplateExprInstantiator::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { - return SemaRef.Owned(E->Clone(SemaRef.Context)); + return SemaRef.Owned(E->Retain()); } Sema::OwningExprResult |