diff options
Diffstat (limited to 'clang/lib/AST/ExprCXX.cpp')
| -rw-r--r-- | clang/lib/AST/ExprCXX.cpp | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/clang/lib/AST/ExprCXX.cpp b/clang/lib/AST/ExprCXX.cpp index 0fb132dbe3f..904928bdf28 100644 --- a/clang/lib/AST/ExprCXX.cpp +++ b/clang/lib/AST/ExprCXX.cpp @@ -1653,23 +1653,7 @@ FunctionParmPackExpr::CreateEmpty(const ASTContext &Context, FunctionParmPackExpr(QualType(), nullptr, SourceLocation(), 0, nullptr); } -MaterializeTemporaryExpr::MaterializeTemporaryExpr( - QualType T, Expr *Temporary, bool BoundToLvalueReference, - LifetimeExtendedTemporaryDecl *MTD) - : Expr(MaterializeTemporaryExprClass, T, - BoundToLvalueReference ? VK_LValue : VK_XValue, OK_Ordinary, - Temporary->isTypeDependent(), Temporary->isValueDependent(), - Temporary->isInstantiationDependent(), - Temporary->containsUnexpandedParameterPack()) { - if (MTD) { - State = MTD; - MTD->ExprWithTemporary = Temporary; - return; - } - State = Temporary; -} - -void MaterializeTemporaryExpr::setExtendingDecl(ValueDecl *ExtendedBy, +void MaterializeTemporaryExpr::setExtendingDecl(const ValueDecl *ExtendedBy, unsigned ManglingNumber) { // We only need extra state if we have to remember more than just the Stmt. if (!ExtendedBy) @@ -1677,11 +1661,13 @@ void MaterializeTemporaryExpr::setExtendingDecl(ValueDecl *ExtendedBy, // We may need to allocate extra storage for the mangling number and the // extended-by ValueDecl. - if (!State.is<LifetimeExtendedTemporaryDecl *>()) - State = LifetimeExtendedTemporaryDecl::Create( - cast<Expr>(State.get<Stmt *>()), ExtendedBy, ManglingNumber); + if (!State.is<ExtraState *>()) { + auto *ES = new (ExtendedBy->getASTContext()) ExtraState; + ES->Temporary = State.get<Stmt *>(); + State = ES; + } - auto ES = State.get<LifetimeExtendedTemporaryDecl *>(); + auto ES = State.get<ExtraState *>(); ES->ExtendingDecl = ExtendedBy; ES->ManglingNumber = ManglingNumber; } |

